一、super关键字:
在对象的内部使用,可代表父类对象。
1.
访问父类的属性:super.age2.
访问父类的方法: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; }
五、总结
子类的构造过程当中必须调用父类的构造方法。如果子类的构造方法中没有显示的调用父类的构造方法,则系统默认调用父类无参的构造方法。
如果显示调用父类的构造方法则必须放在子类构造方法的第一行。
如果子类的构造方法中既没有显示的调用父类的构造方法,而父类中又没有无参的构造方法,则编译出错!!