ITPub博客

首页 > 应用开发 > Java > JAVA继承的初始化问题

JAVA继承的初始化问题

原创 Java 作者:壹頁書 时间:2015-08-28 12:48:42 0 删除 编辑
看代码说结果
  1. public class Dervied extends Base {
  2.     private String name = "dervied";
  3.     public Dervied() {
  4.         tellName();
  5.         printName();
  6.     }
  7.     public void tellName() {
  8.         System.out.println("Dervied tell name: " + name);
  9.     }
  10.     public void printName() {
  11.         System.out.println("Dervied print name: " + name);
  12.     }
  13.     public static void main(String[] args){
  14.         new Dervied();
  15.     }
  16. }
  17. class Base {
  18.     private String name = "base";
  19.     public Base() {
  20.         tellName();
  21.         printName();
  22.     }
  23.     public void tellName() {
  24.         System.out.println("Base tell name: " + name);
  25.     }
  26.     public void printName() {
  27.         System.out.println("Base print name: " + name);
  28.     }
  29. }
运行结果:
Dervied tell name: null
Dervied print name: null
Dervied tell name: dervied
Dervied print name: dervied

为什么会这样呢
并且无论修改Base的name为public还是protected,结果都是这样.
甚至代码改成这样,还是这个结果(Base类的name字段改成了basename)

  1. public class Dervied extends Base {
  2.     private String name = "dervied";
  3.     public Dervied() {
  4.         tellName();
  5.         printName();
  6.     }
  7.     public void tellName() {
  8.         System.out.println("Dervied tell name: " + name);
  9.     }
  10.     public void printName() {
  11.         System.out.println("Dervied print name: " + name);
  12.     }
  13.     public static void main(String[] args){
  14.         new Dervied();
  15.     }
  16. }
  17. class Base {
  18.     public String basename = "base";
  19.     public Base() {
  20.         tellName();
  21.         printName();
  22.     }
  23.     public void tellName() {
  24.         System.out.println("Base tell name: " + basename);
  25.     }
  26.     public void printName() {
  27.         System.out.println("Base print name: " + basename);
  28.     }
  29. }

后台一个大神一语道破
Base的构造函数中,调用的两个方法tellName和printName,因为继承的原因,应该执行的是子类的方法,而子类此时还没有初始化这个数据成员,所以显示为null.

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29254281/viewspace-1784890/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2013-10-19

  • 博文量
    620
  • 访问量
    6339967