0 0

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

父类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时,首先都要调用父类的构造方法,然后再使用子类自己的构造方法生成实例.所以,才会得到这样的运算结果.谢谢你!
2011年10月27日 15:30

1个答案 按时间排序 按投票排序

0 0

采纳的答案

引用
我的疑问是:为什么会在使用了super()的情况下,调用的func()却是子类中的func()?而且是调用了两次?望各位大神解答.


继承构造函数是从上往下构造,也就是说先构造父类再构造子类,这样就出现两次func调用。

2011年10月27日 15:36

相关推荐

    java中的继承(子类调用父类构造方法还不懂).doc

    `super` 可用于访问父类中定义的属性、调用父类中定义的成员方法、在子类构造方法中调用父类的构造方法。`super` 的追溯不仅于直接父类,就是 father 的 father。。。。 多态是 Java 中的一种机制,可以实现方法的...

    详解 Java继承关系下的构造方法调用

    主要介绍了详解 Java继承关系下的构造方法调用的相关资料,希望通过本文能帮助到大家,让大家理解掌握这部分内容,需要的朋友可以参考下

    java面试题静态加载顺序构造方法

    java面试题静态加载顺序构造方法 继承与static 面试题目如下:请写出程序执行完成之后的结果。 package extend; public class X { Y y=new Y(); static{ System.out.println("tttt"); } X(){ System....

    Java继承时构造函数的调用

    Java继承时构造函数的调用, java面向对象特征: 1.抽象:抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用...

    JAVA语言中构造方法的继承与重载探讨.pdf

    JAVA语言中构造方法的继承与重载探讨

    java中继承的使用案例

    (2)学生类Student继承Person,增加了学号信息,有两个构造方法Student()和Student(姓名,性别,年龄,学号),调用父类Person的构造方法对父类部分进行构造,在Student()中,默认学号为空字符串,在Student...

    java学习笔记(构造方法及继承)

    内容为本人在学习java构造方法及继承部分时整理的笔记,内容为构造方法及继承基础知识

    java继承例题

    Java继承机制详解 Java继承是面向对象编程(OOP)的一种机制,允许一个类继承另一个类的成员变量和成员方法。通过继承,可以实现代码的重用和扩展。 在Java中,继承是通过使用关键字`extends`来实现的。例如,`...

    java继承中的构造方法实例解析

    主要介绍了java继承中的构造方法实例解析,针对继承中的构造方法的特点进行了实例分析,需要的朋友可以参考下

    JAVA类的定义及继承演示

    一个构造方法,无参数,在此构造方法中初始化dogName,dogAge 说明二:关于SmallDog 继承Dog,不添加任何属性和方法 最后,在测试类中的main方法中生成SmallDog类的对象,访问属性dogName和dogAge,并打印出他们的值...

    java继承类实例

    自己设计的一个程序,展现有继承结构的子类对象的初始化过程(包含构造方法、初始化值、父类构造方法、父类的初始化值的环节)

    java 实现接口和继承关系

    实现接口和继承关系,每个类都有普通方法和构造方法

    java练习题-继承.doc

    在继承关系中,构造方法 plays a crucial role,例如: ```java public class Animal { public Animal() { // 初始化 Animal 对象 } } public class Dog extends Animal { public Dog() { super(); // 调用...

    java继承与多态PPT教案学习.pptx

    3. 父类的含参数构造方法,子类可以通过在自己构造方法中使用super关键字来调用,但这个调用语句必须是子类构造方法的第一个可执行语句。 例如, class appl5_2 extends superclass,这里appl5_2类继承自superclass...

    java继承和多态PPT教案学习.pptx

    Java继承和多态PPT教案学习 本PPT教案主要讲解了Java中的继承和多态机制,包括继承、里式代换原则、多态和动态绑定、方法重载、重载构造函数和方法覆盖等概念。 继承是面向对象编程的基本机制之一,允许一个类继承...

    java的继承总结.doc

    下面将对Java继承的基本概念、语法格式、继承关系、方法重写、自动转型等进行详细的总结和分析。 一、继承的基本概念 继承是特殊的is-a关系,即子类继承父类,说明子类是一种特殊的父类,并且具有父类所不具有的...

    Java继承习题

    java继承习题精选 包含可很多习题 同时也副有正确答案

    JAVA基础-第4章继承与多态-练习题-200910.doc

    本资源是关于JAVA基础的第四章继承与多态的练习题,涵盖了继承、多态、构造方法、方法覆盖、final类等知识点。本资源共有9道选择题,考察了程序员对JAVA语言的掌握程度。 在第1题中,我们可以看到,编译和运行以下...

    java三大特性之继承

    子类可以继承父类中所有的属性和方法(除了构造方法) 一个父类可以有多个子类 一个子类只能有一个直接的父类-单继承(一个儿子只能有一个亲爹) java中支持多层继承(儿子-爹-爷爷。。。) ...

Global site tag (gtag.js) - Google Analytics