你的理解有点偏差
父类一般都是向上不断抽取得到的,也就是说应用的时候一般是不实例化父类的,父类的 name 属性是私有的,为的是封装与安全,但是父类的 public 方法是可以操作 name 的,而父类的 public 方法又可以被子类继承,这样,你在子类的构造方法中使用 super("小狗"),就可以用继承的方法操作了,而且,子类的构造方法默认在第一行会隐式的调用 super(); 的。看两个程序吧!
- class Animal
- {
- private String name;
- Animal(String name)
- {
- this.name = name;
- }
- //定义一个方法使用 name
- public void show()
- {
- System.out.println(name);
- }
- }
- class Dog extends Animal
- {
- Dog()
- {
- super("小狗");
- }
- Dog(String name)
- {
- super(name);
- }
- }
- class Demo
- {
- public static void main(String[] args)
- {
- Dog dog1 = new Dog();
- dog1.show();
- Dog dog2 = new Dog("小狗");
- dog2.show();
- }
- }
复制代码
输出是:
小狗
小狗
第二个
- class Animal
- {
- private String name;
- Animal()
- {
- name = "小狗";
- }
- //定义一个方法使用 name
- public void show()
- {
- System.out.println(name);
- }
- }
- class Dog extends Animal
- {
- //这里什么都没有,但其实有个默认的构造函数 Dog(){}
- //在 Dog() 函数体的第一行,隐式的有 super(); 语句
- //你可以试一下,加
-
- //Dog(){}
-
- //或
- //Dog(){super();}
-
- //结果是一样的
- }
- class Demo
- {
- public static void main(String[] args)
- {
- Dog dog1 = new Dog();
- dog1.show();
- }
- }
复制代码
结果是:
小狗 |