继承(上)

继承入门

初级信息关系系统的缺陷

  • 问题:我们的学生类和老师类中有很多相同的代码(代码重复冗余)


将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)也可以成功访问呢?
因为当权限为默认时,相同包中的无关类也可以进行访问

posted @ 2023-06-23 22:36  一往而深,  阅读(6)  评论(0编辑  收藏  举报