Java 构造器 一道构造器调用子类重载方法的题目
2013-12-04 08:48
225 查看
构造器中不能new本类对象,否则进入死循环。
构造器没有返回值,也没有void修饰。
使用关键字super可以调用父类的构造器,而且这一句必须放在第一句的位置,否则无法编译。
题目:
请写出以下程序的输出。
输出结果是:
原因是Test类构造一个对象,首先调用的是父类BB的构造器,构造器调用了func方法,这个方法在子类有重载,因此调用的是子类的func方法,此时子类的成员变量a还没有初始化,因此a的值为0。
此外,如果BB类中方法func为private,那么调用的func方法为BB类中的func方法,输出的a值为10。
构造器没有返回值,也没有void修饰。
使用关键字super可以调用父类的构造器,而且这一句必须放在第一句的位置,否则无法编译。
题目:
请写出以下程序的输出。
/** * 构造器题目 * Created by Heyiyong on 2014-4-6 上午12:09. */ public class ConstructorTest extends BB{ public static void main(String[] args) { new ConstructorTest(5); } private int a = 1; public void func() { System.out.println("Test.func a = " + a); } public ConstructorTest(int a) { this.a = a; System.out.println("ConstructorTest"); } } class BB { private int a = 10; public void func() { System.out.println("BB.func a = " + a); } public BB() { System.out.println("BB 构造器"); func(); } }
输出结果是:
BB 构造器 Test.func a = 0 ConstructorTest
原因是Test类构造一个对象,首先调用的是父类BB的构造器,构造器调用了func方法,这个方法在子类有重载,因此调用的是子类的func方法,此时子类的成员变量a还没有初始化,因此a的值为0。
此外,如果BB类中方法func为private,那么调用的func方法为BB类中的func方法,输出的a值为10。
相关文章推荐
- Java之调用被子类重载的方法
- Java 另一道构造器与构造器重载的题目
- java声明子类时,静态语句块、实例代码块、构造器方法这3者的调用顺序
- 从父类构造器调用子类覆盖方法看Java初始化过程
- 创建子类对象时,父类构造函数中调用被子类重写的方法为什么调用的是子类的方法,而被子类重载的方法不会调用?
- Java继承,子类实例化时,调用父类的无参构造方法
- Java调用子类重写方法
- JAVA C# 区别:用父类变量调用子类的方法
- 用jni API 访问java对象的属性,方法,调用构造器
- java 构造方法的相互调用(在一个构造器中,通过this调用另一个构造器)
- java基础:父类与子类之间变量和方法的调用
- Java中父类和子类中的方法调用和参数传递总结
- java 实例化是调用了子类重写方法
- 21天精通java基础之Day19调用指定的属性方法构造器
- 子类、父类相互调用构造器和成员方法问题
- Java之Object构造方法(创建子类对父类构造方法的调用)
- [疯狂Java]泛型:泛型构造器、泛型方法的重载问题、泛型数组的问题(应该摒弃)、?下限的典型应用
- Java之方法重载篇(我重载了,你要如何来调用我。。)
- java中的继承(子类调用父类构造方法还不懂)
- java基础:父类与子类之间变量和方法的调用