继承extends | override重写:子类重写父类方法,方法名称相同,参数列表也相同
子类方法的返回值必须【小于等于】父类方法的返回值范围(实际使用时绝大部分情况是相等的)
子类方法的权限必须【小于等于】父类方法的权限修饰符(实际使用时绝大部分情况是相等的)
super();// 子类必须调用父类构造方法,不写则赠送super(); super只能有一个且必须在第一行
即:子类所有的构造方法默认都会访问父类的无参构造方法,除非自己指定调用父类的有参构造方法
特点1:单继承:一个类的直接父类只能有唯一一个;class B extends A{}
特点2:多级继承,class A extends B{};class B extends C{};
特点3:一个父类可以拥有多个子类
|
static | 静态属性,静态方法,静态关键字,属于类,本类所有对象共享
静态不能直接访问非静态【重点】
静态不能使用this
静态方法使用:类名.static方法();//推荐 对象名.static方法(); //不推荐
非静态方法使用:对象名.static方法();
静态代码块:static{}; //只在第一次使用本类时执行唯一一次,经典用途:一次性地对静态成员变量进行赋值; |
多态 | extends继承或者implements实现,是多态性的前提
向上转型:父类引用指向子类对象,向上转型一定是安全的,是由小范围转向大范围
父类名称 对象名 = new 子类名称();
接口名称 对象名 = new 实现类名称();
访问成员变量:编译看左边,运行看左边
访问成员方法:编译看左边,运行看右边(因为方法被override重写了)
多态的好处:提高程序扩展性,定义方法时,参数为父类对象,调用时,参数为子类对象
多态的弊端:不能直接使用子类的特有功能,需要使用时需要向下转型(因为编译看左边,子类的特有功能父类没有,所以会编译报错)
向下转型:将父类对象还原为子类对象
子类名称 对象名 = (子类名称)父类对象
父类名称 instanceof 子类名称; // 判断该父类本来是否是该子类,如果为true,则可以进行向下转型 |
Abstract抽象类 | 用于对子类使用进行规范
没有方法体的方法叫做抽象方法,抽象方法存在类必须为抽象类,抽象方法和抽象类用 abstract 修饰
抽象类中不一定有抽象方法(但是没有抽象的意义),有抽象方法的一定是抽象类
不能直接创建new抽象类对象,必须用子类来实现抽象父类,创建子类对象对父类所有抽象方法重写(实现),否则子类也为抽象类 |
Interface接口
implements实现 | 接口是多个类的公共规范,是一种引用数据类型
包含:常量、【重点】抽象方法(abstract)、默认方法(default)、静态方法(static)、私有方法(private)
不包含:构造方法、静态代码块
常量的修饰符必须是public static final,可以省略,常量必须赋值且不能改变
抽象方法的修饰符必须是public adstract,可以省略
默认方法作用:可以解决接口升级问题
静态方法使用:接口名称.静态方法; 注意不能用实现类的对象.接口静态方法
私有方法作用:抽取并解决两个默认方法之间重复代码的问题,不会被实现类访问到,只被接口自己使用
一个类可以实现(implements)多个接口
接口与接口之间是多继承的
实现类实现的多个接口中若存在重复的抽象方法,只需要覆盖重写一次
实现类若没有覆盖重写所有接口中的所有抽象方法,那该类就必须是抽象类
实现类实现的多个接口中若存在重复的默认方法,必须要对冲突的默认方法覆盖重写
实现类继承的父类与实现的接口中的默认方法发生冲突,优先使用父类的方法 |
|
|