java面向对象
类和对象的区别
概念:类是对某一类事物的抽象描述,而对象用于表示现实中该类事物的个体
局部变量和成员变量区别
区别一:定义的位置不同
定义在类中的变量是成员变量
定义在方法中或者{}语句里面的变量是局部变量
区别二:在内存中的位置不同
成员变量存储在堆内存的对象中
局部变量存储在栈内存的方法中
区别三:生命周期不同
成员变量随着对象的出现而出现在堆中,随着对象的消失而从堆中消失
局部变量随着方法的运行而出现在栈中,随着方法的弹栈而消失
区别四:初始化不同
成员变量因为在堆内存中,所有默认的初始化值
局部变量没有默认的初始化值,必须手动的给其赋值才可以使用。
面向对象的三个特征:
封装,继承,多态。
封装:
l 封装的好处:
n 1、提高了代码的复用性。
n 2、隐藏了实现细节,对外提供可以访问的方式。便于调用者的使用。
n 3、提高了安全性。
private 私有: 不允许修改
this哪个对象调用了this所在的方法,this就代表哪个对象。
继承:
类的继承是指在一个现有类的基础上去构建一个新的类,构建出来的新类被称作子类,现有类被称作父类,子类会自动拥有父类所有可继承的属性和方法。
extends 继承
格式:class 子类 extends 父类 {}
特点:
当出现同名成员变量时,如果子类有,则继承子类,如果子类没有,则继承父类的
super 代表父类对象
在子类中若要访问父类中的成员变量,必须使用关键字super来完成。super用来表示当前对象中包含的父类对象空间的引用。
格式:super.父类中的成员变量
所有类的隐形父类叫Object
方法重写:
子类方法覆盖父类方法,必须保证权限大于父类权限。
写法:返回类型 方法名 参数列表必须一样
抽象类:
abstract
抽象方法定义的格式:
public abstract 返回值类型 方法名(参数);
抽象类定义的格式:
abstract class 类名 {
}
1抽象类一定是个父类
2抽象类中可以不定义抽象方法
3抽象关键字abstract不可以和private/私有 共存
接口:
概念:接口是功能的集合,同样可看做是一种数据类型,是比抽象类更为抽象的”类”。
接口只描述所应该具备的方法,并没有具体实现,具体的实现由接口的实现类(相当于接口的子类)来完成。这样将功能的定义与实现分离,优化了程序设计。
接口的定义:
使用interface代替了原来的class,其他步骤与定义类相同:
l 接口中的方法均为公共访问的抽象方法
l 接口中无法定义普通的成员变量
接口中所有成员变量修饰符 public static final
static 静态:只要被static修饰的成员 在外界可以直接通过 类名.成员 调用
被final 修饰的变量叫常量,不能改变
在接口中 所有方法的修饰符都是 public abstract
类实现接口:implements
格式:
class 类 implements 接口 {
重写接口中方法
}
多态:
父类引用对象指向子类对象
父类类型 变量名 =new 子类类型();
父类引用指向子类对象成员变量特点:编译运行都看左边
编译看父类,如果父类有,则运行时访问父类的成员变量
如果父类没有 编译失败
成员方法特点 :编译看左边 运行看右边
编译看父类,如果父类有,则编译成功,运行时子类重写后的方法;
如果父类没有,则编译失败
Pe pe=new St();//向上转型
System.out.println(pe.a);
向下转型:一个已经向上转型的子类对象可以使用强制类型转换的格式,将父类引用转为子类引用
向下转型后 就可以调用子类独有的方法
instanceof 判断
pe instanceof Pe