1.super,相较于关键字this,可以修饰属性、方法、构造器
2.super修饰属性、方法:在子类的方法、构造器中,通过super.属性或者super.方法的形式,显式的
调用父类的指定属性或方法。尤其是,当子类与父类有同名的属性、或方法时,调用父类中的结构的
话,一定要用“super.”
3.通过“super(形参列表)”,显式的在子类的构造器中,调用父类指定的构造器!
任何一个类(除Object类)的构造器的首行,要么显式的调用本类中重载的其它的构造器this(形参列
表)或显式的调用父类中指定的构造器super(形参列表),要么默认的调用父类空参的构造器"super()"
建议在设计类时,提供一个空参的构造器!
注意以下几点:
(1)调用父类的构造器(也成构造方法),在存在子父类继承关系的时候,要实例化一个子类的对象,
那么必须要首先实例化其父类,就在这时super()表现了他的作用;
(2)super()只能出现在子类的构造器中,且必须写在第一行;
(3)super()中的参数决定了,在子类对象实例化时,要调用父类的那个构造器为父类实例化;
(4)如果子类构造器中没有super()出现,那么编译器则会默认加上super()即父类的空构造器
(当然这空构造器可以是系统默认产生的那个),若此时父类中没有空的构造器(即父类中声明了
一个有参数的构造器,使得系统不再生成默认的构造器),那么编译就会出错;
(5)super关键字可以通过(super.父类参数)的方式来调用父类中的参数;
(6)注意,在同一个构造器中不能同时出现super关键字和this关键字!
下面简单说下super的两个应用
super可以调用当前对象的父类对象的方法:
- class A
- {
- double size = 10;
- void printsize()
- {
- System.out.println(size);
- }
- }
- class B extends A
- {
- double size = 20;
- void printsize()
- {
- System.out.println(size);
- System.out.println(super.size);
- super.printsize();
- }
- }
- public class C
- {
- public static void main(String args[])
- {
- B b = new B();
- b.printsize();
- }
- }
super可以调用当前对象的父类对象的构造器:
- class A
- {
- public A(int a,int b)
- {
- System.out.println("欢迎访问DannyWu博客");
- }
- }
- class B extends A
- {
- public B()
- {
- super(1,1);
- System.out.println("欢迎访问DannyWu博客");
- }
- public B(int a)
- {
- super(1,1);
- System.out.println("欢迎访问DannyWu博客");
- }
- }
- public class C
- {
- public static void main(String args[])
- {
- B b1 = new B();
- B b2 = new B(1);
- }
- }
