继承的好处和弊端
好处:
提高了代码的复用性
提高了代码的维护性
让类与类之间产生了关系,是多态的前提
弊端:
继承是侵入性的
降低了代码的灵活性
继承关系,导致子类必须拥有父类非私有属性的方法,让子类自由的世界多了些约束
增强了代码的耦合性
代码与代码之间存在关联都可以将其称之为“耦合”。
耦合性:
代码与代码之间存在关键都可以将其称之为“耦合”
什么时候使用继承:
当类与类之间,存在相同(共性)的内容,并且产生了is a的关系,就可以考虑使用继承,来优化代码。
例如:
学生:姓名,年龄,性别
老师:姓名,年龄,性别
共性
人:姓名,年龄,性别.
继承的特点
java只支持单继承,不支持多继承,但支持多层继承。
单继承:子类只能继承一个父类
不支持多层继承:子类不能同时继承多个父类。
多层继承:子类A继承父类B,父类B可以继承父类C。
继承的成员变量访问特点
在子类方法中访问一个变量
子类局部范围找
子类成员范围找
父类成员范围找
注意:
如果子父类中,出现了重名的成员变量,通过就近原则,会优先使用子类的
如果一定要使用父类的,可以通过super关键字,进行区分
使用子类成员变量使用this关键字
Zi.java
public class Zi extends FU{
int a = 20;
public void method(){
int a = 30;
System.out.println(a); // 30
// 打印本类成员变量 20
System.out.println(this.a); // 20
// 打印父类成员变量 10
System.out.println(super.a); // 10
}
}
Fu.java
public class FU {
int a = 10;
}
test.java
public class Test {
public static void main(String[] args) {
Zi z = new Zi();
z.method();
}
}
继承的成员变量访问特点
super关键字的用法和this关键字的用法相似
this:代表本类对象的引用
super:代表父类存储空间的标识(可以理解为父类对象引用)
关键字 | 访问成员变量 | 访问成员方法 | 访问构造方法 |
---|---|---|---|
this | this.成员变量,访问本类成员变量 | this成员方法.(…)访问本类成员方法 | this(…)访问本类构造方法 |
super | super.成员变量,访问父类成员变量 | super.成员方法(…)访问父类成员方法 | super(,)访问父类构造方法 |
继承中成员方法的访问特点
通过子类对象访问一个方法
子类成员范围找
父类成员范围找
Fu.java
public class Fu {
public void show(){
System.out.println("父类show方法");
}
}
Zi.java
public class Zi extends Fu{
public void show(){
System.out.println("子类show方法");
}
public void method(){
this.show(); // 调用自己的
super.show(); // 调用父类的
}
}
Test.java
public class Test {
public static void main(String[] args) {
Zi z = new Zi();
z.method();
}
}