Java继承注意事项难点理解
继承(干货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继承注意事项难点理解相关推荐
- java 继承多态的一些理解和不理解
1.向上转型的一个误区 一直以为Child 继承Parent以后, Parent p = new Child(); p可以调用Child类中拓展Parent的方法,原来必须在强制转换成Child类才 ...
- Java继承个人的理解_我对java继承的理解
关于java继承和多态的文章已经很多了,如果你对java的继承和多态已经有很好的理解,请绕过本变文章, 如果你对java的继承和多态不是很理解,还在找寻这方面的东西,那这篇文章可能对你有所帮助. 首先 ...
- java继承类型转换_#java 一个简单的例子理解java继承、成员函数重写、类型转换...
一个简单的例子理解java继承.成员函数重写.类型转换 1.继承简介 举一个简单的例子:笔分为很多种,比如毛笔.钢笔.圆珠笔等等,这些笔都有一些相同的属性比如长度.笔迹的粗细等等:但他们也有不同的特点 ...
- 通过java理解linux,Java继承的理解
继承: 1)概念 把多个类中相同的成员给提取出来定义到一个独立的类中.然后让这多个类和该独立的类产生一个关系,这多个类就具备了这些内容.这个关系叫继承. 1.1)定义类时,通过"继承&quo ...
- 我爸是李刚 java_深入理解java继承从“我爸是李刚”讲起
前言 本文主要多方面讲解java继承,旨在让初学者通俗易懂,至于"我爸是李刚",反正楼主也不知道谁爸是李刚. @ 1.继承的概述 1.1.继承的由来 至于由来简单一句话:多个类中存 ...
- 抽象、封装、继承、多态--基本理解
抽象: 我们在定义一个类的时候,实际上就是把一类事物的公有的属性和行为提取出来,形成一个物理模型,这种研究问题的方法称为抽象. 封装: 封装就是把抽象的数据和对数据进行的操作封装在一起,数据被保存在内 ...
- java 继承、super、this、抽象类
java 继承.super.this.抽象类 三大特性--继承 方法重写 super关键字 this关键字 抽象类 第一章 继承 1.1 概述 由来 多个类中存在相同属性和行为时,将这些内容抽取到单独 ...
- JAVA继承和多态详细讲解
面向对象编程的重要知识:继承和多态.通过类的继承机制,可以使用已有的类为基础派生出新类,无需编写重复的程序代码,很好地实现程序代码复用.多态是面向对象编程中继封装和继承之后的另一大特征,它具体是指同一 ...
- java继承对象转换_java 继承的基础(转)
java 继承的基础(转)[@more@]继承是面向对象编程技术的一块基石,因为它允许创建分等级层次的类.运用继承,你能够创建一个通用类,它定义了一系列相关项目的一般特性.该类可以被更具体的类继承,每 ...
最新文章
- java 如何只暴露接口_Java并发异步编程,原来十个接口的活现在只需要一个接口就搞定...
- java读取utf-8文件第一行多一个问号
- 「ProtocolBuffers2」ProtocolBuffers2 Python简易入门
- 【Android开发】用户界面设计-开发自定义的View
- 阿里资深技术专家:如何快速成长为技术大牛?
- python实现: protobuf解释器
- Problem E: 校庆
- 计算机视觉论文-2021-06-25
- android指南针校准 代码_Android 指南针传感器
- c++_string与double/int互转
- 【图像修复】基于matlab GUI运动模糊消除(逆滤波)【含Matlab源码 847期】
- matplotlib——3D图
- 【最详细】数据结构(C语言版 第2版)课后习题答案全集 严蔚敏 等 编著
- 四轮循迹小车基础程序
- PS制作一寸带白框的证件照
- VB6 Chr码值对应列表大全
- Gini Index vs Information Entropy
- Weighted Interval Scheduling
- 星际争霸游戏中的操作心得
- 计算机工作中只读不写,u盘实现只读不写方法