继承

举报
@小红花 发表于 2022/02/25 15:50:31 2022/02/25
【摘要】 什么是继承?有什么用?子承父业就是继承基本作用:子类继承父类,代码可以得到复用。主要作用:因为有了继承关系,才有了后期的方法覆盖和多态机制。 继承的相关特性:1、B类继承A类,则称A类为超类(superclass),父类,基类B类则称为子类(subclass),派生类,拓展类。class A{}class B extends A{}我们平时聊天说得比较多的是:父类和子类。2、Java中的继承...
  • 什么是继承?有什么用?
    • 子承父业就是继承
    • 基本作用:子类继承父类,代码可以得到复用。
    • 主要作用:因为有了继承关系,才有了后期的方法覆盖和多态机制。

 

  • 继承的相关特性:
    • 1、
      • B类继承A类,则称A类为超类(superclass),父类,基类
      • B类则称为子类(subclass),派生类,拓展类。
      • class A{}
      • class B extends A{}
      • 我们平时聊天说得比较多的是:父类和子类。
    • 2、
      • Java中的继承只支持单继承,不支持多继承,C++中支持多继承,
      • 这也是Java体现简单性的一点,换句话说,Java中不允许这样写代码:class B extends A,C{}  
    • 3、
      • 虽然Java中不支持多继承,但有的时候会产生间接继承的效果,例如:
      •  class B extends A{}        class C extends B{}   
      • 也就是说C直接继承B,其实还间接继承A
    • 4、
      • Java中规定,子类继承父类,除构造方法不能继承之外,剩下都可以继承。但是私有的属性无法在子类中直接访问,(父类中private修饰的不能再子类中直接访问,可以通过间接的手段来访问。)
    • 5、
      • Java中的类没有显示继承任何类,默认继承object类型,object类是Java语言提供的根类(老祖宗类),也就是说,一个对象与生俱来就有object类型中所有的特征。
    • 6、
      • 继承也存在一些缺点,子类继承了父类就导致他们之间耦合度非常高,父类发生改变,子类必定受到牵连。

     

问题:子类继承父类之后,能使用子类对象调用父类方法吗?

答:本质上,子类继承父类之后,是将父类继承过来的方法归为自己所有。实际上调用得到也不是父类的方法,是他子类自己的方法(因为已经继承过来了就属于自己了)。

 

在实际开发中,满足什么条件的时候,我可以使用继承呢?

凡是采用 is a 能描述的,都可以继承。

例如:cat is a animal

假设以后的开发中有一个A类,有一个B类,A类和B类确实也有重复的代码,

那么他们两个之间就可以继承吗?不一定,还是要看一看他们之家你是否能够使用is  a 来描述。

 

任何一个类,没有显示继承任何类,默认继承object,那么object类当中有哪些方法呢?

以后慢慢的大家一定要适应看JDK的源代码。

 

java为什么比较好学呢?

是因为java内置了一套庞大的类库,程序员不需要从0开始写代码,程序员可以基于这套庞大的类库进行二次开发(开发速度较快,因为JDK内置的这套库实现了很多基础的功能)

例如:StringSUM公司编写的字符串类,SystemSUM编写的系统类。

这些类可以拿来直接使用。

System.out.println();

类名.静态变量.方法

 

我们研究了一下object类当中有很多方法,大部分看不懂,其中有一个叫做toString()的,我们进行了测试,发现:

System.out.println(引用);

当直接输入一个引用的时候,println()方法会先自动调用引用.toString()

然后输出toString()方法的执行结果。

 

什么时候我们会考虑方法覆盖呢?

子类继承父类之后,当继承过来的方法无法满足当前子类的业务需求时,

子类有权利对这个方法进行重新编写,有必要进行方覆盖。

 

重要结论:

当子类对父类继承过来的方法进行方法覆盖之后。

子类对象调用该方法的时候,一定执行覆盖之后的方法。

 

当我们代码怎么编写的时候,在代码级别上构成了方法覆盖呢?

条件一:两个类必须要有继承关系。

条件二:重写之后的方法和之前的方法具有:

相同的返回值类型

相同的方法名

相同的形式参数列表

条件三:访问权限不能更低,可以更高、

条件四:重写之后的方法不能比之前的方法抛出更多的异常。

 

  • 注意事项:
    • 注意1:方法覆盖只是针对于方法,和属性无关。
    • 注意2:私有方法无法覆盖。
    • 注意3:构造方法不能被继承,所以构造方法也不能被覆盖。
    • 注意4:方法覆盖只是针对于实例方法,静态方法覆盖没有意义。

 

当输出一个引用的时候,println方法会自动调用引用的toString

toString()方法存在的作用就是:将java对象转换成字符串形式。

大多数的javatoString()方法都是需要覆盖的。

因为object类中提供toString()方法输出的是一个java对象的内存地址。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。