继承之super关键字的使用

一、super关键字:

在对象的内部使用,可代表父类对象。

1.
访问父类的属性:super.age

2.
访问父类的方法:super.eat()

例:

package 关键字extends;

public class Dog extends Animal{
    int age=20;
    public void eat(){
        System.out.println("狗具有吃东西的能力!");
    }
    public Dog(){
        System.out.println("子类执行了!");
    }
    public void method(){
        System.out.println(super.age);//访问父类的属性
        super.eat();                  //访问父类的方法
        System.out.println(age);      //访问父类的属性    
        eat();                        //访问子类方法
    }
}

结果:

父类执行了!
子类执行了!
40
动物具有吃东西的能力!
20
狗具有吃东西的能力!

二、

子类的构造过程当中必须调用父类的构造方法

创建子类对象的时候,会自动执行父类构造方法,并创建父类对象。此时就隐式的使用了super关键子。

super关键字显示的写出来:

package 关键字extends;

public class Dog extends Animal{
    int age=20;
    public Dog(){
        super();                  //super关键字   
        System.out.println("子类执行了!");
    }
}
主函数中:
        Dog dog=new Dog();//创建子类对象
        //dog.method();
父类执行了!
子类执行了!

super关键字隐识表达:

public class Dog extends Animal{
    int age=20;
    public Dog(){
        //super();             //这里注释掉super关键字   
        System.out.println("子类执行了!");
    }
}
主函数中:
        Dog dog=new Dog();
        //dog.method();

结果:

父类执行了!
子类执行了!

三、
如果子类的构造方法当中没有显示调用父类的构造方法,则系统会默认调用
父类无参的构造方法

如果要显示的调用构造方法,则super关键字必须放在子类的构造方法的第一行

这里写图片描述

四、
如果子类的构造方法中既没有显示的调用父类的构造方法,
而父类又没有无参的构造方法,则编译出错

也就是说父类有有参的构造方法,子类的无参构造函数就会报错!!!

如何修改:

1.使用显示调用父类的构造函数并传入参数值;

    public Dog(){
        super(3);     //子类显示调用并传入参数
        System.out.println("子类执行了!");

    }

2.在父类中在添加一个无参的构造方法

    public Animal(){         //无参的构造方法
        System.out.println("父类执行了!");
    }
        public Animal(int age){  //有参的构造方法
        this.age=age;
    }

五、总结
子类的构造过程当中必须调用父类的构造方法。

如果子类的构造方法中没有显示的调用父类的构造方法,则系统默认调用父类无参的构造方法。

如果显示调用父类的构造方法则必须放在子类构造方法的第一行。

如果子类的构造方法中既没有显示的调用父类的构造方法,而父类中又没有无参的构造方法,则编译出错!!

posted @ 2016-11-12 14:30  滕鹏飞  阅读(237)  评论(0编辑  收藏  举报