继承(干货0.0)

继承是存在与面向对象程序中两个类之间的一种关系。被继承的类称为父类或超类,而继承父类的类称为子类。父类实际上是所有子类的公共域和公共方法的集合。每个子类是父类的特殊化。

Java继承的实现

通过 extends关键字指明其要继承的父类。子类对象除了可以访问子类中之直接定义的成员外,也可以访问父类的所有非私有成员。(不支持多继承,但可以通过接口实现)

构造方法在继承中的作用

构造方法不能继承。 由于子类对象要对继承父类的成员进行初始化,因此,在创建子类对象时,除了执行子类的构造方法,还需要调用父类的构造方法。

  • 子类可以在自己的构造方法中使用关键字super明确调用父类的构造方法,但super调用的语句必须是子类构造方法中的 第一个 可执行语句
  • 如果子类中没有明确调用父类的构造方法,则在创建对象时,首先自动执行父类的无参构造方法,然后再执行自己定义的构造方法。(所以一般在父类中添加无参构造方法,以防出错)
class Parent{String my;
public Parent(String x){my=x;
}
public class Subclass extends Parent{}

在Parent类中由于定义了有参的构造方法,所以系统不会自动产生无参构造方法,如果将有参构造方法注释掉,编译可以通过。

  • 关键字super: super与this在使用上类似,super表示当前对象的直接父类对象的引用,通过super除了可以调用父类的构造方法外,还能引用父类的属性和方法。使用this查找匹配的方法时,首先在本类中查找,在找不到时再到其父类和祖先类查找。使用super查找匹配方法时,首先到直接父类查找,如果不存在,继续到其祖先类逐级向高层查找。

访问继承的成员(这里有些难理解)

如果子类中定义了与父类同名的属性,在子类中将隐藏来自父类的同名变量属性。这里也是 “最近优先原则”,自己类中有就不会去找父类的。

如图所示的继承关系:

ExtendShow b=new ExtendShow();
SuperShow a=b;
b.show();
a.show();

父类和子类都有各自的show()方法。
将子类对象赋值给父类的引用变量后,通过该引用变量去访问对象的成员时,访问的行为方法是子类对象的覆盖方法,而属性值却是父类的。原因在于对象执行方法时由实际对象的类型决定,而不是引用变量类型;访问属性时则由实际对象的类型决定,因为编译程序在分许程序时是基于类型来决定访问哪个属性变量
另外,静态成员是依赖类的,静态成员的访问基于引用变量的类型,而不是对象的类型。尽管父类引用变量可指向子类对象,但是通过父类引用变量访问的静态方法和静态属性均是父类的。 换句话说,通过父类引用访问子类对象时,只有实例方法会是子类的,对象属性、静态属性、静态方法均是指父类定义的。

注意: 子类一般情况下是不用引用父类的,如Child c = Father f只有父类对象是用子类new出来时,才可以强制转换为子类。

interface IFace{}class CFace implements IFace{}class Base{}public class ObRef extends Base{public static void main(String[] args) {ObRef obj = new ObRef();Base b = new Base();Object obj1 = new Object();IFace obj2 = new CFace();obj1=obj2;obj1=b;b=obj;obj=b;    //错误obj=(ObRef)b; //错误//只有父类对象是用子类new出来时,才可以强制转换为子类Base c = new ObRef();obj=(ObRef)c;}

Java继承注意事项难点理解相关推荐

  1. java 继承多态的一些理解和不理解

    1.向上转型的一个误区 一直以为Child 继承Parent以后, Parent p = new Child();  p可以调用Child类中拓展Parent的方法,原来必须在强制转换成Child类才 ...

  2. Java继承个人的理解_我对java继承的理解

    关于java继承和多态的文章已经很多了,如果你对java的继承和多态已经有很好的理解,请绕过本变文章, 如果你对java的继承和多态不是很理解,还在找寻这方面的东西,那这篇文章可能对你有所帮助. 首先 ...

  3. java继承类型转换_#java 一个简单的例子理解java继承、成员函数重写、类型转换...

    一个简单的例子理解java继承.成员函数重写.类型转换 1.继承简介 举一个简单的例子:笔分为很多种,比如毛笔.钢笔.圆珠笔等等,这些笔都有一些相同的属性比如长度.笔迹的粗细等等:但他们也有不同的特点 ...

  4. 通过java理解linux,Java继承的理解

    继承: 1)概念 把多个类中相同的成员给提取出来定义到一个独立的类中.然后让这多个类和该独立的类产生一个关系,这多个类就具备了这些内容.这个关系叫继承. 1.1)定义类时,通过"继承&quo ...

  5. 我爸是李刚 java_深入理解java继承从“我爸是李刚”讲起

    前言 本文主要多方面讲解java继承,旨在让初学者通俗易懂,至于"我爸是李刚",反正楼主也不知道谁爸是李刚. @ 1.继承的概述 1.1.继承的由来 至于由来简单一句话:多个类中存 ...

  6. 抽象、封装、继承、多态--基本理解

    抽象: 我们在定义一个类的时候,实际上就是把一类事物的公有的属性和行为提取出来,形成一个物理模型,这种研究问题的方法称为抽象. 封装: 封装就是把抽象的数据和对数据进行的操作封装在一起,数据被保存在内 ...

  7. java 继承、super、this、抽象类

    java 继承.super.this.抽象类 三大特性--继承 方法重写 super关键字 this关键字 抽象类 第一章 继承 1.1 概述 由来 多个类中存在相同属性和行为时,将这些内容抽取到单独 ...

  8. JAVA继承和多态详细讲解

    面向对象编程的重要知识:继承和多态.通过类的继承机制,可以使用已有的类为基础派生出新类,无需编写重复的程序代码,很好地实现程序代码复用.多态是面向对象编程中继封装和继承之后的另一大特征,它具体是指同一 ...

  9. java继承对象转换_java 继承的基础(转)

    java 继承的基础(转)[@more@]继承是面向对象编程技术的一块基石,因为它允许创建分等级层次的类.运用继承,你能够创建一个通用类,它定义了一系列相关项目的一般特性.该类可以被更具体的类继承,每 ...

最新文章

  1. java 如何只暴露接口_Java并发异步编程,原来十个接口的活现在只需要一个接口就搞定...
  2. java读取utf-8文件第一行多一个问号
  3. 「ProtocolBuffers2」ProtocolBuffers2 Python简易入门
  4. 【Android开发】用户界面设计-开发自定义的View
  5. 阿里资深技术专家:如何快速成长为技术大牛?
  6. python实现: protobuf解释器
  7. Problem E: 校庆
  8. 计算机视觉论文-2021-06-25
  9. android指南针校准 代码_Android 指南针传感器
  10. c++_string与double/int互转
  11. 【图像修复】基于matlab GUI运动模糊消除(逆滤波)【含Matlab源码 847期】
  12. matplotlib——3D图
  13. 【最详细】数据结构(C语言版 第2版)课后习题答案全集 严蔚敏 等 编著
  14. 四轮循迹小车基础程序
  15. PS制作一寸带白框的证件照
  16. VB6 Chr码值对应列表大全
  17. Gini Index vs Information Entropy
  18. Weighted Interval Scheduling
  19. 星际争霸游戏中的操作心得
  20. 计算机工作中只读不写,u盘实现只读不写方法

热门文章

  1. Django 优秀资源大全项目资源非 Python 包工具贡献
  2. PCB中英对照一、 综合词汇
  3. 筛表合集(素数筛 欧拉函数筛 莫比乌斯函数筛)
  4. 《循序渐进学Spark》一1.7 本章小结
  5. 内存管理(注意事项和重点)
  6. JS 数据结构之旅 :通过JS实现栈、队列、二叉树、二分搜索树、AVL树、Trie树、并查集树、堆
  7. TypeScript 变量声明
  8. 面试精讲之面试考点及大厂真题 - 分布式专栏 20 降级组件Hystrix的功能特性
  9. 用于 Keras 用户使用的 TensorFlow.js layers API
  10. 图片服务 - thumbor成像