问题描述
- 这段代码执行为什么结果会是null
-
代码:public class Dervied extends Base { private String name = "dervied"; public Dervied() { tellName(); printName(); } public void tellName() { System.out.println("Dervied tell name: " + name); } public void printName() { System.out.println("Dervied print name: " + name); } public static void main(String[] args){ new Dervied(); } } class Base { private String name = "base"; public Base() { tellName(); printName(); } public void tellName() { System.out.println("Base tell name: " + name); } public void printName() { System.out.println("Base print name: " + name); } }
执行结果
Dervied tell name: null
Dervied print name: null
Dervied tell name: dervied
Dervied print name: dervied为什么会是null????
解决方案
1、首先private是不会继承到新的对象里,所以不会出现“base”。
2、由于重写的缘故,在执行super的构造函数是,还是调用的子类方法,此时成员变量未初始化。
解决方案二:
主方法中创建一个对象,此时会去调用该类构造器,该类有父类,所以会先去调用父类构造器,在构造器中调用了两个方法,其中的name是属于对象实例的属性,需要用对象调用,但此时还没有对象
解决方案三:
路上说的比较清楚了,主要看一下super相关概念以及子类构造函数与父类构造函数之间的关系。
时间: 2024-09-19 02:06:07