尚学堂 老师好!

上海:15201841284

广州:020-2989 6995

深圳:0755-23061965

武汉:027-8798 9193

西安:029-8822 8155

Java super关键字

java中的super关键字是一个引用变量,用于引用直接父类对象。

每当创建子类的实例时,父类的实例被隐式创建,由super关键字引用变量引用。
 

更多精彩内容以及学习资料,尚学堂论坛bbs.bjsxt.com免费下载。

java super关键字的用法如下:

  • super可以用来引用直接父类的实例变量。
  • super可以用来调用直接父类方法。
  • super()可以用于调用直接父类构造函数。

1. super用于引用直接父类实例变量

可以使用super关键字来访问父类的数据成员或字段。 如果父类和子类具有相同的字段,则使用super来指定为父类数据成员或字段。

 class Animal {     String color = "white"; }  class Dog extends Animal {     String color = "black";      void printColor() {         System.out.println(color);// prints color of Dog class         System.out.println(super.color);// prints color of Animal class     } }  class TestSuper1 {     public static void main(String args[]) {         Dog d = new Dog();         d.printColor();     } } 
Java

执行上面代码,输出结果如下 -

 black white 
Java

在上面的例子中,AnimalDog都有一个共同的属性:color。 如果我们打印color属性,它将默认打印当前类的颜色。 要访问父属性,需要使用super关键字指定。

2. 通过 super 来调用父类方法

super关键字也可以用于调用父类方法。 如果子类包含与父类相同的方法,则应使用super关键字指定父类的方法。 换句话说,如果方法被覆盖就可以使用 super 关键字来指定父类方法。

 class Animal {     void eat() {         System.out.println("eating...");     } }  class Dog extends Animal {     void eat() {         System.out.println("eating bread...");     }      void bark() {         System.out.println("barking...");     }      void work() {         super.eat();         bark();     } }  class TestSuper2 {     public static void main(String args[]) {         Dog d = new Dog();         d.work();     } } 
Java

执行上面代码,输出结果如下 -

 black white 
Java

在上面的例子中,AnimalDog两个类都有eat()方法,如果要调用Dog类中的eat()方法,它将默认调用Dog类的eat()方法,因为当前类的优先级比父类的高。
所以要调用父类方法,需要使用super关键字指定。

3. 使用 super 来调用父类构造函数

super关键字也可以用于调用父类构造函数。下面来看一个简单的例子:

 class Animal {     Animal() {         System.out.println("animal is created");     } }  class Dog extends Animal {     Dog() {         super();         System.out.println("dog is created");     } }  class TestSuper3 {     public static void main(String args[]) {         Dog d = new Dog();     } } 
Java

注意:如果没有使用super()this(),则super()在每个类构造函数中由编译器自动添加。

Java super关键字

我们知道,如果没有构造函数,编译器会自动提供默认构造函数。 但是,它还添加了super()作为第一个语句。

下面是super关键字的另一个例子,这里super()由编译器隐式提供。

 class Animal {     Animal() {         System.out.println("animal is created");     } }  class Dog extends Animal {     Dog() {         System.out.println("dog is created");     } }  class TestSuper4 {     public static void main(String args[]) {         Dog d = new Dog();     } } 
Java

执行上面代码,输出结果如下 -

 animal is created dog is created 
Java

super实际使用示例

下面来看看super关键字的实际用法。 在这里,Emp类继承了Person类,所以Person的所有属性都将默认继承到Emp。 要初始化所有的属性,可使用子类的父类构造函数。 这样,我们重用了父类的构造函数。

 class Person {     int id;     String name;      Person(int id, String name) {         this.id = id;         this.name = name;     } }  class Emp extends Person {     float salary;      Emp(int id, String name, float salary) {         super(id, name);// reusing parent constructor         this.salary = salary;     }      void display() {         System.out.println(id + " " + name + " " + salary);     } }  class TestSuper5 {     public static void main(String[] args) {         Emp e1 = new Emp(1, "ankit", 45000f);         e1.display();     } } 
Java

执行上面代码,输出结果如下 -

 1 ankit 45000

更多精彩内容以及学习资料,尚学堂论坛bbs.bjsxt.com免费下载。

  • 北京校区
  • 西安校区
  • 山西校区
  • 武汉校区
  • 深圳校区
  • 上海校区
  • 广州校区
  • 保定招生办
  • 黑龙江项目办

北京京南校区:北京亦庄经济开发区科创十四街6号院1号楼 赛蒂国际工业园
咨询电话:400-009-1906 / 010-56233821
面授课程: JavaEE+微服务+大数据     大数据+机器学习+平台架构     Python+数据分析+机器学习  人工智能+模式识别+强化学习   WEB前端+移动端+服务端渲染

地址:陕西省西安市高新区西安软件园西区创新信息大厦A座三层尚学堂

电话:029-88228155 / 18291433445

山西学区地址:山西省晋中市榆次区大学城大学生活广场万科商业A1座702

武汉学区地址:武汉市东湖高新区光谷金融港B22栋11楼
咨询电话:027-87989193

深圳校区地址:深圳市宝安区航城大道U8智造产业园U6栋3楼
咨询电话:0755-23061965 / 18898413781

上海尚学堂校区地址:上海市浦东新区城丰路650号
咨询电话:021-67690939

广州校区地址:广州市天河区车陂街道大岗路5号中侨广场2栋321室(四号线车陂站D出口,或brt车陂站)
咨询电话:18948349646

保定招生办公室

地址:河北省保定市竞秀区朝阳南大街777号鸿悦国际1101室

电话:15132423123

黑龙江项目办
地点:哈尔滨市松北区博文路青年部落孵化器1层
电话:15321415678
Copyright 2006-2021 北京尚学堂科技有限公司  京ICP备13018289号-19  京公网安备11010802015183  
网站维护:北京尚学堂科技有限公司昌平分公司