继承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)多个接口 接口与接口之间是多继承的 实现类实现的多个接口中若存在重复的抽象方法,只需要覆盖重写一次 实现类若没有覆盖重写所有接口中的所有抽象方法,那该类就必须是抽象类 实现类实现的多个接口中若存在重复的默认方法,必须要对冲突的默认方法覆盖重写 实现类继承的父类与实现的接口中的默认方法发生冲突,优先使用父类的方法 |
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) | 黑马程序员IT技术论坛 X3.2 |