第二章 继承
一、使用继承
继承是面向对象的三大特特之一,Java只支持单继承。继承表达 is a 的关系。
在Java中,所有的Java类都直接或间接的地继承了Java.lang.object类,所有类都是Object的子类
1.编写父类
Class Pet {
//公共的属性和方法
}
2.编写子类,继承父类
Class Dog extends Pet {
//子类特有的属性和方法
}
Class Penguin extends Pet {
}
二、关于修饰符可否被子类继承
继承public和protected修饰的属性和方法,不管同不同包。
继承默认权限修饰符的属性和方法,只有在同包
无法继承private修饰的属性和方法
无法继承父类的构造函数
访问修饰符 |
本地 |
同包 |
子类 |
其他 |
Private |
|
|
|
|
默认 |
|
|
||
Protected |
|
|||
Public |
二、理解继承
1.子类访问父类成员
使用super关键字
访问父类属性
Super.name; (super代表父类对象)
2 ) 访问父类方法
Super.print();
2.有些父类成员不能继承
1)private成员
2)子类与父类不在同包,使用默认访问权限的成员
3)构造方法
3.访问修饰符protected
1)可以修饰属性和方法
2)本类、同包、子类可以访问
4.
1)Super必须出现再子类(子类的方法或构造函数)中,不能再其他位置
2)可以访问父类成员(可被继承的)
3)访问父类构造函数必须在子类构造函数的第一条语句
四、符合is-a关系的设计使用继承
1.Java中,继承(Inheritance)通过extends关键字来实现,其中SubClass称为子类,SuperClass称为父类、基类或超类。
2.在子类中可以根据需求对从父类继承的方法进行重新编写,称为方法的重写或方法的覆盖。
方法的重写满足的要求:
五、构造方法
1.构造方法不能被继承因此不能被重写。
2.在子类中调用父类的构造方法?
Super();
Super(参数表);
3.super代表对当前对象的直接父类对象的默认引用。在子类中可以通过super关键字来访问父类的成员。
Super的要求
4.继承条件下构造方法的调用规则:
5.使用this和super注意事项:
六、重写和继承关系中的构造方法
重写父类的print()方法
重写:子类中可以根据需求对从父类继承的方法进行重新编写,称为方法的重写或者方法的覆盖。
一.方法重写必须满足如下要求:
1.重写方法和被重写方法必须具有相同的方法名
2.重写方法和被重写方法必须具有相同的参数列表
3.重写方法的返回值必须和被重写方法的返回值类型相同或者是其子类。
4.重写方法不能缩小被重写方法的访问权限。
二、重载和重写有什么区别?”
重载:重载在同一个类中的同名方法,要求方法名相同,参数列表不同,与返回值类型,访问修饰符无关。
重写:重写是子类和父类之间的同名方法,要求方法名相同,参数列表相同,返回值类型相同,访问修饰符不能严于父类。
七、abstract关键字
1.抽象类和抽象方法都通过abstract关键字来修饰。
2.abstract也可以用于方法——抽象方法
1)抽象方法没有方法体
2)抽象方法必须在抽象类里。
3)抽象方法必须在子类中被实现,除非子类是抽象类。
Public abstract void print();——没有方法体
3.final修饰符
1)用final修饰的类,不能再被继承
2)用final修饰的方法,不能被子类重写
3)用final修饰的变量(包括成员变量和局部变量)将变成常量,只能赋值一次。
注意:P57
4.abstract是否可以和private、static、final共用