A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 会飞的蜗牛 中级黑马   /  2014-4-6 15:49  /  1295 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class Animal{
   private String name;
   public Animal(String name) {
     this.name = name;
   }
}
public Dog extends Animal{
   public Dog(){
     super("小狗");
   }
}


在Dog类的构造方法中调用父类的构造方法,可是有什么用呢?在父类中name是private的,super("小狗");这一句话只是把Animal类中的private String name;初始化成了private String name=“小狗”;
还是我的理解错了?

3 个回复

倒序浏览
你的理解有点偏差
父类一般都是向上不断抽取得到的,也就是说应用的时候一般是不实例化父类的,父类的 name 属性是私有的,为的是封装与安全,但是父类的 public 方法是可以操作 name 的,而父类的 public 方法又可以被子类继承,这样,你在子类的构造方法中使用 super("小狗"),就可以用继承的方法操作了,而且,子类的构造方法默认在第一行会隐式的调用 super(); 的。看两个程序吧!
  1. class Animal
  2. {
  3.         private String name;

  4.         Animal(String name)
  5.         {
  6.                 this.name = name;
  7.         }

  8.         //定义一个方法使用 name
  9.         public void show()
  10.         {
  11.                 System.out.println(name);
  12.         }
  13. }

  14. class Dog extends Animal
  15. {
  16.         Dog()
  17.         {
  18.                 super("小狗");
  19.         }
  20.         Dog(String name)
  21.         {
  22.                 super(name);
  23.         }
  24. }

  25. class Demo
  26. {
  27.         public static void main(String[] args)
  28.         {
  29.                 Dog dog1 = new Dog();
  30.                 dog1.show();

  31.                 Dog dog2 = new Dog("小狗");
  32.                 dog2.show();
  33.         }
  34. }
复制代码

输出是:
小狗
小狗

第二个
  1. class Animal
  2. {
  3.         private String name;
  4.         Animal()
  5.         {
  6.                 name = "小狗";
  7.         }
  8.         //定义一个方法使用 name
  9.         public void show()
  10.         {
  11.                 System.out.println(name);
  12.         }
  13. }

  14. class Dog extends Animal
  15. {
  16.         //这里什么都没有,但其实有个默认的构造函数 Dog(){}
  17.         //在 Dog() 函数体的第一行,隐式的有 super(); 语句
  18.         //你可以试一下,加
  19.        
  20.         //Dog(){}
  21.        
  22.         //或

  23.         //Dog(){super();}
  24.        
  25.         //结果是一样的
  26. }

  27. class Demo
  28. {
  29.         public static void main(String[] args)
  30.         {
  31.                 Dog dog1 = new Dog();
  32.                 dog1.show();
  33.         }
  34. }
复制代码

结果是:
小狗

点评

Thanks  发表于 2014-4-12 17:54
回复 使用道具 举报 1 0
但是父类的 public 方法是可以操作 name 的,而父类的 public 方法又可以被子类继承
Thanks
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马