继承(上)
继承入门
初级信息关系系统的缺陷
- 问题:我们的学生类和老师类中有很多相同的代码(代码重复冗余)
将student和teacher类相同的属性和方法抽取成一个专门的父类Person
学到这里的话,我们可以将我的信息管理系统进行优化:将student和teacher共同代码抽取成一个Person类,
- 继承的概述
继承的好处和弊端
耦合性:可以理解为代码之间关联的紧密程度
-
继承增加代码耦合性演示
如上图所示:当我们的2个类都继承自Person类,当我们的Person类中的属性发生变化,在我们的子类中使用该属性的地方都和发生报错。这极大的增加了我们后期维护代码的难度 -
什么时候使用继承
-
总结
继承的特点
- java为什么不支持多继承
当如果一个子类有2个父类,而这2个父类中有2个相同名称的方法method,当子类调用子类中的method方法时,将会导致这种逻辑上的错误。java为了避免这个问题从而禁止多继承
继承中成员遍历的访问特点
成员变量(属性)访问符合就近原则:
当我们的方法中访问一个变量时,会现在我们的方法中寻找,方法中没有将会到成员变量中寻找,成员变量中没有,将到父类的成员变量中寻找
- 可以通过:
- this.标注调用本类的成员变量
- super.调用父类的成员变量
- 总结
this和super访问成员的格式
this和super分别作为本类和父类的引用,他们2个是平级的,并且都用相似的应用。相当于有2个引用分别父类和子类。this和super只能在本类中出现
super访问父类时,可以直接访问public间接访问private
继承中成员方法的访问特点
方法重写
- 方法重写应用场景
class Phone1{
//手机有语句助手功能
public void smallBlack(){
System.out.println("通过英文进行交流");
}
}
class Phone2 extends Phone1{
//手机有语句助手功能
public void smallBlack(){
super.smallBlack();//父类的功能
System.out.println("通过中文进行交流");
}
}
进行方法重写可以让子类既包含子类的功能,又包含自己特有的功能
方法重写的注意事项
- 单独记忆
static修饰的方法不能够进行重写,但是当我们的子类去调用这个"被重写"的方法时,调用的也是子类的方法,和子类的重写有着相同的现象。
这个可以理解为,子类的该方法将父类的该方法隐藏了。这个单独记忆一下就好了
权限修饰符
同一个包下被子类访问,指的是在子类中通过super关键字访问父类成员。而不是让你在子类中创建父类对象访问
- 证明:同一个包下被子类访问,指的是在子类中通过super关键字访问父类成员。而不是让你在子类中创建父类对象访问
**我们分别在不同的包中创建Student类Person类,并且Student类继承自Person类(验证Prodected权限)
从上面的图片可以看到,super可以成功访问不同包下面的子类,而在不同包中创建对象不能访问不同包中的父类
子类对父类的访问使用super即可,如果在子类中创建父类的对象,然后使用对象进行访问,会被判定为是无关类在访问该类
为什么验证默认访问权限时(验证同一个包中的子类是否可以访问)在子类中创建Person的对象(而不是使用super)也可以成功访问呢?
因为当权限为默认时,相同包中的无关类也可以进行访问