【JAVA】关于继承关系中构造方法的问题

问题描述

父类Person,有无参构造方法Person(),和公用方法func().子类Teacher,有无参构造方法Teacher(),有参构造方法Teacher(int a)和公用方法func(). 代码如下: class Teacher extends Person {public Teacher() {super();}public Teacher(int a) {System.out.print(a);}public void func() {System.out.print("2,");}public static void main(String[] args) {Teacher t1 = new Teacher();Teacher t2 = new Teacher(3);}}class Person {public Person() {func();}public void func() {System.out.print("1,");}} 题目是問运行结果是什么?  我的理解如下:从主方法入手,声明Teacher类的实例t1和t2,其中t1使用无参构造方法Teacher()进行初始化,而Teacher()中使用super(),即使用父类Person中无参构造方法Person(),在这个父类的构造方法中调用了func().所以,实例t1输出是:1, .在实例t2中,使用有参构造方法Teacher(int a)进行初始化.所以,实例t2输出是:3 所以猜测的运行结果应该为1,3  实际运行结果为:2,2,3  我的疑问是:为什么会在使用了super()的情况下,调用的func()却是子类中的func()?而且是调用了两次?望各位大神解答. 问题补充:<div class="quote_title">Wind_ZhongGang 写道</div><div class="quote_div"><div class="quote_title">引用</div><div class="quote_div"> 我的疑问是:为什么会在使用了super()的情况下,调用的func()却是子类中的func()?而且是调用了两次?望各位大神解答.</div><br /><br />继承构造函数是从上往下构造,也就是说先构造父类再构造子类,这样就出现两次func调用。</div><br /><br />也就是説.在调用子类Teacher的构造方法生成实例t1和t2时,首先都要调用父类的构造方法,然后再使用子类自己的构造方法生成实例.所以,才会得到这样的运算结果.谢谢你!

解决方案

引用 我的疑问是:为什么会在使用了super()的情况下,调用的func()却是子类中的func()?而且是调用了两次?望各位大神解答.继承构造函数是从上往下构造,也就是说先构造父类再构造子类,这样就出现两次func调用。

时间: 2024-09-12 17:16:18

【JAVA】关于继承关系中构造方法的问题的相关文章

泛型继承关系中,如何在子类中直接访问泛型类T?

问题描述 假设我创建了一个类A,并假设类A中定义了许多属性和函数publicclassA{publicintproperty1{get;set;}publicfloatproperty2{get;set;}publicboolproperty3{get;set;}......}假设有一个泛型基类:GenericBase<T>publicclassGenericBase<T>whereT:A{}然后我创建一个新类GenericA继承上面的泛型类publicclassGenericA:

JAVA 【引用类型】和【对象类型】在【继承】中的异同

介绍     JAVA [引用类型]和[对象类型]在[继承]中的异同,这个问题自己整理过N次,也被人当菜鸟问过N次.所以,在此简单整理一下,以供大家分享. 在继承关系中,一般成员变量是根据引用类型 在继承关系中,静态成员变量是根据引用类型 在继承关系中,一般方法是根据对象类型 在继承关系中,静态方法是根据引用类型 注意     静态成员变量,静态方法是基于类的,本文为了测试观察,所以,会用对象去引用静态成员变量和静态方法.      Super Class: package shuai.stud

浅析Java的Hibernate框架中的继承关系设计_java

这次我们来说一下hibernate的层次设计,层次设计也就是实体之间的继承关系的设计.  也许这样比较抽象,我们直接看例子.  1)我们先看一下普通的做法  直接上代码:三个实类如下: public class TItem implements Serializable{ //省略Get/Set方法 private int id; private String manufacture; private String name; } public class TBook extends TItem

类的继承-继承问题中的Has_A和Is_A的关系到底是怎么样的?

问题描述 继承问题中的Has_A和Is_A的关系到底是怎么样的? 新手刚学java,还不是很懂.想问图中a[1] 为什么不能用bark(),语录3怎么错了?语句6运行为什么会出错? 解决方案 IS--A基于类继承或接口实现,IS-A是表达这句话的一种方式:"这个东西是那个东西的一种".例如:野马是一种马.(是一个) HAS-A关系是基于用法(即引用)而不是继承.换句话说,如果类A中的代码具有对类B实例的引用,则"类A HAS-A类B".例如:马有缰绳.(有一个) &

Java的Hibernate框架中的继承映射学习教程_java

一.继承映射继承是面向对象很重要的特性,它实现了代码的服用,在关系模型中同样也有继承关系,这种继承关系其实可以看做是一种枚举关系,一种类型中可以枚举出很多子类型,这些子类型和父对象形成了继承关系,能够对其进行枚举的大部分都可以看做是一种继承映射,所以这种枚举关系可以看做是继承映射,例如动物就是一种抽象类,它是其它动物猪.猫等的父类,它们之间就是一种继承关系,如下图: 这种继承映射在转化为关系模型后会生成一张表,那么这张表是如何区分这两种类型的呢?用的是关系字段,需要在表中添加类型字段,使用关键字

对象的继承关系在数据库中的实现方式和PowerDesigner设计

在面向对象的编程中,使用对象的继承是一个非常普遍的做法,但是在关系数据库管理系统RDBMS中,使用的是外键表示实体(表)之间的关系,那么对于继承关系,该怎么在RDBMS中表示呢?一般来说有3种实现方式: Concrete Table Inheritance(具体表继承) Single Table Inheritance(单表继承) Class Table Inheritance(类表继承) 比如在一个教务系统中,有老师学生2个对象,这两个对象都是"人"对象的子类,所以我们可以建立一个P

对象-java中构造方法simpleadapter没有定义好是什么原因造成的???

问题描述 java中构造方法simpleadapter没有定义好是什么原因造成的??? The constructor SimpleAdapter(new View.OnClickListener(){} List> int String[] int[]) is undefined 有时候系统提示加:我也加了:但是eclipse还是报错是什么原因造成的 解决方案 是编译错误还是运行时错误呢? 解决方案二: 把你代码贴出来看看.

ORM中的继承关系映射全解——单表继承体系、一实体一具体表、一实体一扩展表

ORM中的继承关系映射全解--单表继承体系.一实体一具体表.一实体一扩展表.接口映射 本文涉及的内容包括: 1.单表继承体系 2.一实体一具体表 3.一实体一扩展表 4.接口实现映射vs基类继承映射 1.单表继承体系 所谓单表继承体系就是用一张数据库表存储整个继承体系中的所有实体的数据.单表继承体系适合那种继承体系中实体数目相对较少,总记录数相对较少,子类对父类的属性扩展也相对较少的情形. 单表继承体系优点是读/写继承体系中的每个实体的数据,都只需操作一张表,性能较好,并且,新增继承类,或扩展实

Python中类型关系和继承关系实例详解

  本文详细介绍了Python中类型关系和继承关系.分享给大家供大家参考.具体分析如下: 如果一个对象A持有另一个对象B的ID,那么检索到A之后就可以检索到B,我们就说存在一个A到B的导航.这种导航关系使得Python中所有对象之间形成了一个复杂的网络结构. Python程序的运行包括: 1. 修改这个网络结构; 2. 执行有副作用的代码对象(code object或者说bytecode,见Python Language Reference 3.2) (副作用是指影响Python虚拟机之外的设备