Java基础学习(十七)面向对象之java关键字super

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可以调用当前对象的父类对象的方法:

  1. class A
  2. {
  3.     double size = 10;
  4.     void printsize()
  5.     {
  6.         System.out.println(size);
  7.     }
  8. }
  9. class B extends A
  10. {
  11.     double size = 20;
  12.     void printsize()
  13.     {
  14.         System.out.println(size);
  15.         System.out.println(super.size);
  16.         super.printsize();
  17.     }
  18. }
  19. public class C
  20. {
  21.     public static void main(String args[])
  22.     {
  23.         B b = new B();
  24.         b.printsize();
  25.     }
  26. }

super可以调用当前对象的父类对象的构造器:

  1. class A
  2. {
  3.     public A(int a,int b)
  4.     {
  5.         System.out.println("欢迎访问DannyWu博客");
  6.     }
  7. }
  8. class B extends A
  9. {
  10.     public B()
  11.     {
  12.         super(1,1);
  13.         System.out.println("欢迎访问DannyWu博客");
  14.     }
  15.     public B(int a)
  16.     {
  17.         super(1,1);
  18.         System.out.println("欢迎访问DannyWu博客");
  19.     }
  20. }
  21. public class C
  22. {
  23.     public static void main(String args[])
  24.     {
  25.         B b1 = new B();
  26.         B b2 = new B(1);
  27.     }
  28. }
weinxin
我的微信
有问题微信找我
DannyWu

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: