class A extends B {.....}
父类和子类的类加载+构造规则
1.触发子类的加载时,优先处理完父类的加载。
2.子类对象实例化时,优先处理完父类对象的实例化
子类构造方法的规则 - 显示
所有子类中的构造方法,必须通过super()调用父类的一个构造方法
且该语句,必须第一个执行
隐士规则
如果子类中没有写出super(),则隐含着super()调用了父类的无惨构造方法
属性名/方法名的识别
this.xxx 优先查找子类中的属性/方法,没有找到时,继续去匹配父类中的属性和方法
super.xxx 直接去找父类中的属性和方法
子类中存在和父类中相同的属性名和方法名时,使用super较多。
方法的重写(Override)(频繁应用)
- 只会发生在子类和父类之间
- 子类把父类已经存在的方法,重写了一遍
1.方法名要求一致
2.形参列表要求一致
3.返回值要求一致
4.访问限定符要求一致
3.通过子类对象,调用重写的方法时,会执行子类的代码,而不是父类的代码
抽象:通过子类对象,执行方法/访问属性,优先按子类的走,如果子类中不存在,才去找父类的。
可以执行哪些方法/属性 ,是跟着引用类型走的。
多态总结:
1.相同的引用,由于实际指向的对象不同,导致有不同的形态表现
2.语法规则:
1.祖先类的引用可以指向子孙类的对象 - 向上转型(99%)
(object是所有类的祖先,所以object引用可以指向Java中的所有对象)
2.具备哪些能力,看的是引用的类型(实际中使用哪个方法,看的是对象类型)
3.偶尔的情况下,可能需要回归其原本类型 - 向下转型(1%)
1.强制规则语法
2.ClassCastExcetpion
3.instanceof
静态绑定 static bind : - 发生在静态时期(编译时期)
- 能执行哪些方法,看引用类型
动态绑定 dynamic bind : - 发生在动态时期(运行时期)
- 具体执行的是哪个类中的方法,看对象类型
1 . 其他规则的补充
1.Java中只允许单继承
2.提到继承时,更多的看重 类作为实例化对象的模板的作用(所有的静态属性/静态方法,都不享受继承的规则)
2 . 如何定义无法被重写的方法 - final 关键字修饰方法
3 . 如何定义无法被继承的类 - final 关键字修饰类
final关键字的三个作用: 总体的意思,都是表达“最终的”这个含义
1.修饰变量的定义(属性/静态属性/形参变量/局部变量),该变量只允许有一次赋值的机会
2.修饰类的定义:这个类不能被继承,这个类不能有子类
3.修饰类中的普通方法,这个类子类中,不能重写被final修饰的方法。
抽象类:无法实例化出对象
通过abstract(抽象)修饰类的定义
抽象方法 - 定义在父类中,专门留给子类去重写的方法(父类只有方法签名,没有实现)
public abstract class SuperClass {
// abstract 修饰的方法,是抽象方法
// 特点是,只有方法签名,没有方法体
public abstract void method();
}
抽象方法只能出现在抽象类中,而抽象类中不一定有抽象方法。
抽象类 vs 普票类 区别:是否可以实例化对象
abstract在Java中的两个作用:
1.修饰类的定义,类变成抽象类。(则该类无法被直接实例化)
2.修饰方法的定义:
1.要求该类必须是抽象类
2.该方法只需签名,无需方法体。(只说明目的,没有怎么做)