java中继承关系学习小结

继承:把多个类中相同的内容提取出来,定义到一个类中,其他类只需要继承该类,就可以使用该类公开的属性和公开的方法。

继承的好处:提高代码的复用性。提高代码的可维护性。让类与类之间产生关系,是多态存在的一个前提。

继承的弊端:提高了类与类之间的耦合性。

开发的原则:低耦合,高内聚

耦合:类与类之间的关系

内聚:自己单独完成某件事情的能力。

在Java中只允许单继承。一个类如果没有显示的继承其他类,则该类的默认父类为Object类。Object类是所有类的父类。

Java支持多层继承。

父类的公开方法可以访问父类的私有方法和私有成员。

子类只能继承父类所有非私有的成员(成员方法和成员变量)。

子类不能继承父类的构造方法,但是可以通过super()关键字去访问父类的构造方法。

不要为了部分功能而去继承。

什么时候考虑采用继承?

继承体现的是is-a的关系。

采用假设法:有两个类A和B,如果A是B的一种具体体现,或者B是A的一种具体体现时,就可以采用继承。

继承中,成员变量的关系:子父类中各定义了一个同名成员变量时,子类中的成员变量会覆盖父类中的成员变量。在子类中可以通过super来调用父类中的同名变量。

在子类方法中访问一个变量的查找顺序:

a:在子类的对应的局部范围内查找,有就是用

b:在子类的成员范围内查找,有就是用。

c:在父类的成员范围内查找,有就是用。

如果都没有找到,则报错。

在一个类中,方法与方法之间是平级关系,方法之间不能访问对方的局部变量。

super和this的区别:

this代表本类对象的引用

super代表父类存储空间的标示,相当于父类的引用。

this和super都可以访问构造方法、成员变量和成员方法。

继承间构造方法之间的关系。

子类所有的构造方法默认都会去访问父类的无参构造方法。

因为子类会继承父类中的数据,可能会用到父类中的数据,所以在子类初始化之前,一定要完成父类的初始化。

每一个构造方法的第一条语句默认都是:super

如何父类中没有构造方法,该怎么办呢?

子类通过super去显示调用父类其他的带参的构造方法

子类通过this去调用本类的其他构造方法,本类其他构造也必须首先访问了父类构造

一定要注意:

super(…)或者this(….)必须出现在第一条语句上,否则,就会有父类数据的多次初始化

继承间成员方法的关系

子父类中各定义了一个同名成员方法时,子类中的成员方法会覆盖父类中的成员方法。在子类中可以通过super来调用父类中的同名方法。

通过子类对象去访问一个方法的查找顺序:

a:在子类中查找,如果找到就调用

b:在父类中查找,如果找到就调用

如果都没有找到,就报错。不会查找父类的父类……

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-11-06 03:31:52

java中继承关系学习小结的相关文章

C++/Java中继承关系引发的调用关系详解

C++: 这里引用到了 http://blog.csdn.net/haoel/article/details/1948051/ 中的内容,还请提前阅读陈大神的这篇博客后在阅读本篇. 覆盖,实现多态的基础,通过虚函数表来实现,下面这个例子便是覆盖 Override 1 #include<iostream> 2 3 using namespace std; 4 5 class Base{ 6 public: 7 Base(){ 8 cout << "Base::Base&qu

Java:继承关系中的构造函数(转)

1.构造函数不会被继承到子类. 2.子类的构造函数中的第一行(除注释外)必须是父类对象(super)的构造函数. 如果没有显示指定,则有两种情况: 1)如果父类有默认构造器(不带参数的构造器才是默认构造器),则会隐式地调用它(super()),此时不会出错: 2)如果父类没有默认构造器,则会出错. class Game { Game() { System.out.println("Game default constructor"); } Game(int i) { System.ou

Java中继承,类的高级概念的知识点

1. 继承含义 在面向对象编程中,可以通过扩展一个已有的类,并继承该类的属性和行为,来创建一个新的类,这种方式称为继承(inheritance). 2. 继承的优点 A.代码的可重用性 B.子类可以扩展父类的属性和方法 C.父类的属性和方法可用于子类 D.设计应用程序变得更加简单 3. 如何判断类具有继承关系? 类与类的关系:  a. has—a(组合关系) b. is—a(继承关系) 4. Java中继承的实现(关键字:extends)   关键字extends出现在类声明时的类名后,exte

关于Java中继承和接口的理解

关于Java中继承和接口的理解 Java语言中,为了实现代码重用,设计了继承这一机制,但是,其设计成单继承,这样设计是有原因的,如下图: Figure1:deadly diamond of death 此图问题称为菱形问题(diamond problem),就是说,当A的子类B和C同时实现了A中的方法,则同时继承了B和C的子类D在调用该方法时会出现混乱,无法得知该调用哪一个方法. 既然不能实现多继承,我们就会考虑把很多方法就写在父类里,或者继承抽象类,实现其方法,但是,这样会导致一个问题,比如说

【深入理解JVM】:Java类继承关系中的初始化顺序

Java类初始化的顺序经常让人犯迷糊,现在本文尝试着从JVM的角度,对Java非继承和继承关系中类的初始化顺序进行试验,尝试给出JVM角度的解释. 非继承关系中的初始化顺序 对于非继承关系,主类InitialOrderWithoutExtend中包含了静态成员变量(类变量)SampleClass 类的一个实例,普通成员变量SampleClass 类的2个实例(在程序中的顺序不一样)以及一个静态代码块,其中静态代码块中如果静态成员变量sam不为空,则改变sam的引用.main()方法中创建了2个主

Java类继承关系中的初始化顺序

Java类初始化的顺序经常让人犯迷糊,现在本文尝试着从JVM的角度,对Java非继承和继承关系中类的初始化顺序进行试验,尝试给出JVM角度的解释. 非继承关系中的初始化顺序 对于非继承关系,主类InitialOrderWithoutExtend中包含了静态成员变量(类变量)SampleClass 类的一个实例,普通成员变量SampleClass 类的2个实例(在程序中的顺序不一样)以及一个静态代码块,其中静态代码块中如果静态成员变量sam不为空,则改变sam的引用.main()方法中创建了2个主

java中继承的关系

当有父子关系的两个类(继承关系),当子类实例化对象的时候  会默认调用父类的无参构造方法,如果有  super()的话,调用的是父类有参的构造方法! 也就是说 父类必须有 有参构造 没有的话super()关键字会报错! 这个的打印结果是 父类的构造方法中的输出语句子类的show方法 原文地址:https://www.cnblogs.com/gu-bin/p/9965791.html

[转]Java中继承、多态、重载和重写介绍

什么是多态?它的实现机制是什么呢?重载和重写的区别在那里?这就是这一次我们要回顾的四个十分重要的概念:继承.多态.重载和重写. 继承(inheritance) 简单的说,继承就是在一个现有类型的基础上,通过增加新的方法或者重定义已有方法(下面会讲到,这种方式叫重写)的方式,产生一个新的类型.继承是面向对象的三个基本特征--封装.继承.多态的其中之一,我们在使用JAVA时编写的每一个类都是在继承,因为在JAVA语言中,java.lang.Object类是所有类最根本的基类(或者叫父类.超类),如果

java中继承和多态

转自原文http://blog.csdn.net/xinxin19881112/article/details/2944760 若冒犯博主,请勿见怪! 1.  什么是继承,继承的特点? 子类继承父类的特征和行为,使得子类具有父类的各种属性和方法.或子类从父类继承方法,使得子类具有父类相同的行为. 特点:在继承关系中,父类更通用.子类更具体.父类具有更一般的特征和行为,而子类除了具有父类的特征和行为,还具有一些自己特殊的特征和行为. 在继承关系中.父类和子类需要满足is-a的关系.子类是父类. 表