首页 > 其他分享 >继承(上)

继承(上)

时间:2023-06-23 22:44:24浏览次数:27  
标签:访问 继承 子类 Person 父类 super

继承入门

初级信息关系系统的缺陷

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


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

标签:访问,继承,子类,Person,父类,super
From: https://www.cnblogs.com/swtaa/p/17500039.html

相关文章

  • Android-kotlin的继承
    上一篇博客讲了Android-kotlin的配置/入门,然后简单的实现了一个计算器功能。今天我们来讲讲kotlin中的继承是怎样的。1.先看一个案例,子类使用到父类的资源【案例一】父类张翠山:packagecn.kotlin.kotlin_oop03/***描述父对象:张翠山**personDescribe此人的简介/var......
  • 【python基础】类-继承
    编写类时,并非总是要从空白开始。如果要编写的类时另一个现成类的特殊版本,可使用继承。一个类继承另一个类时,它将自动获得另一个类的所有属性和方法原有的类称为父类,而新类被称为子类。子类继承了其父类的所有属性和方法,同时还可以定义自己的属性和方法。继承语法格式:class子类......
  • ES5和ES6的继承
    (1)ES5//构造函数functionPerson(name){this.name=name}//原型Person.prototype.say=function(){console.log('我是'+this.name)}//子类构造函数继承父类构造函数functionSon(name,age){//调用父类构造函数,让父类中的this指向当前子类Person.call(thi......
  • AppWidgetProvider的继承
    publicclassWlanWidgetextendsAppWidgetProvider{RemoteViewsremoteViews;AppWidgetManagerappWidgetManager;ComponentNamethisWidget;WifiManagerwifiManager;publicvoidonUpdate(Contextcontext,AppWidgetManagerappWidgetManager,in......
  • linearlayout继承扩展篇
    前面写了一个一个linearLayout,只不过那个只是继承了一个属性,在群聊的时候有人问想在扩展的时候添加几个按钮,作为一个封装用,于是我就试了一下效果还不错:我做了一个人工的进度条可以加可以减主函数很简单就一句话setContentView(R.layout.main);相比大家都明白所有的东西都在main.......
  • C++继承和派生
    #继承和派生在C++中,继承和派生是面向对象编程的两个重要概念,用于实现类与类之间的关系。继承是指一个类可以从另一个类中继承属性和方法,并且可以在此基础上扩展出自己的属性和方法。被继承的类称为基类(父类),继承的类称为派生类(子类)。在C++中,可以通过以下方式定义一个派生类:```c++cl......
  • python3 面向对象编程--类的封装和继承
    #python3importrefromurllibimportrequestimportosclassPosterSpider(object):def__init__(self,path='./'):self.path=path#theentryofthisprocessdefgetStart(self,url):page=self.reqPage(url)......
  • java--继承
       ......
  • Java面向对象编程的三大特性:封装、继承、多态。
    一、封装封装的核心在于私有化(private),大部分情况下,来封装对象的属性,很少有封装方法的。通过将对象的属性封装,提供对外的公共方法来访问属性是最常见的方式。publicstaticclassFengZhuang{//通过封装,设置私有属性privateStringname;privat......
  • 《C++》继承
    继承classA:publicB子类:继承方式父类classPhone{public: Phone() { frame="框架"; screen="屏幕"; battery="电池"; }public: stringframe; stringscreen; stringbattery;};classBrand:publicPhone{public: Brand(strin......