继承与多态
1. 继承:以既有类为基础,派生出新类,达到代码重用的目的。
封装:对类对象的数据成员进行访问控制,起到数据保护的作用。
多态:对于同一个对象方法,输入不同,操作不同。
①动态匹配同名方法,使程序更灵活(重载)。
②多态在类体系中把接口(做什么)和实现(怎么做)分开→→子类覆盖。
2. 创建子类的语法格式:
[访问权限符] class <子类名> extends <父类名>
3. 初始化子类时,先调用父类的构造方法,再调用子类的构造方法,这样可以保证子类从父类继承的成员可以进行正确的初始化。
初始化子类时,子类空间不仅包括子类还包括父类可继承的内容。
4. 子类this,父类super,可以调用相应方法、构造方法、成员变量, this()、super()需在第一行。
5. 对象类型的转换
①向上转型。子类对象赋值给父类类型的变量,这是从具体类型到抽象类型的转换,它总是安全的。
②向下转型。将父类对象转化为子类对象,必须使用显示类型转换。
Eg: mm a =(mm)b;
注:在转换时,父类对象必须是子类对象的实例,否则会报错。可用instanceof 来进行判断一个实例对象是否属于一个类。
6. 一个子类只能继承一个父类。
7. 父类一般应提供无参的构造方法。
8. 如果一个类有子类则最好为其设计一个无参的构造方法。
9. 子类覆盖父类,必须要保证方法的返回值类型和方法头完全相同,且子类的修饰符可访问性不能低于父类。
10. 初始化模块用于初始化类与对象。是一个用大括号括住的语句块。 运行顺序: 类静态变量> 静态代码块>实例变量>构造代码块>构造方法
11. 构造代码块:用于对对象的共性内容进行初始化,优先级高于构造方法 { ... }(构造代码块)
12. 静态代码块:用于对类进行初始化,只执行一次 static {...}(静态代码块)
13. 覆盖必须 返回值、方法名、参数完全相同,而重载方法名相同,参数不同。