1、final相关:
final可以修饰类、方法、变量。
final修饰的类不能被继承。
final修饰的方法不能被覆写。
final修饰的变量不能被重新赋值。
****:final修饰引用类型时,其实是引用类型的地址值不能变,所以修改该地址对应的堆内存的数值是可以的。
2、多态
前提:
继承关系、
方法覆写、
【向上转型】父类引用指向子类对象(即 Fu f=new Zi())
多态中成员的访问特点:
Fu f=new Zi();
①、成员变量:编译看左边,运行看左边;
②、成员方法:编译看左边,运行看右边【因为方法有覆写,所以运行看右边】;
③、静态方法:编译看左边,运行看左边;
④、构造方法:创建子类对象的时候,访问父类的构造方法,对父类的数据进行初始化。
弊端:
父类引用不能使用子类的特有功能(方法等)。
解决:
【向下转型】子类引用再指向父类对象,即:Zi z=(Zi) f;
3、若想要类不能实例化对象,则只要将类的构造方法私有化即可。
4、抽象方法和抽象类的概念
抽象方法:没有方法体(即没有大括号)的方法。
抽象类的特点:
①、abstract关键字修饰
②、抽象类中不一定有抽象方法,但有抽象方法的类一定是抽象类。
③、抽象类不能实例化,但可以通过子类向上转型实现。
抽象类的子类:
①、是一个抽象类,abstract修饰。
②、重写父类中的所有抽象方法,成为实现类。
抽象类的成员:
①、成员变量既可以是变量也可以是final修饰的常量。
②、有构造方法的,用于子类访问父类数据的初始化。
③、成员方法可以是抽象的也可以是非抽象的,但抽象方法要通过子类实现才可以调用。
抽象方法让子类去实现,非抽象方法让子类继承。
抽象类的问题:
①、abstract不能与以下关键字共存:
private、final、static
②、一个抽象类是否可以没有抽象方法?有什么意义?
抽象类可以没有抽象方法,这样的抽象类为了不让实例化对象。
5、接口特点:
①、接口的定义:
interface 接口名{}
②、类实现接口:
class 类名 implements 接口名{}
③、接口不能实例化
只能按照多态方式实例化
④、接口的子类:
可以是抽象类
可以是具体类:必须重写接口中的所有抽象方法。
5、接口的成员特点:
成员变量:
只能是常量,并且是静态的。
默认修饰符:public static final,建议开发中这样写。
成员方法:
只能是抽象方法。
默认修饰符:public abstract,建议开发这样写。
构造方法:
接口没有构造方法
接口的子类默认继承的是Object父类,Object是所有类的根类。
6、类、接口的关系:
类与类:
继承关系,只能单继承,可以多重继承。
类与接口:
实现关系,可以但实现,也可以多实现;可以在实现之前先继承。
接口与接口:
继承关系,可以单继承,也可以多继承。
7、抽象类和接口的区别:
①、成员区别:
抽象类:
成员变量:可以变量,也可以常量
成员方法:可以抽象,也可以非抽象
构造方法:有
接口:
成员变量:只能常量
成员方法:只能抽象
构造方法:没有
②、关系区别:
类与类:单继承
类与接口:实现、单继承、多实现
接口与接口:继承、单继承、多继承
③、设计理念区别:
抽象类:定义的是共性功能。
接口:定义的是扩展功能。