个性化阅读
专注于IT技术分析

Java super关键字

本文概述

super 关键字在Java是一个引用变量用于引用直接父类对象。

当你创建子类的实例,父类的一个实例被创建隐式引用的super 引用变量。

使用Javasuper 关键字

  1. super 可用于引用直接父类实例变量。
  2. super 可用于调用直接父类方法。
  3. super()可以立即用于调用父类的构造函数。

1)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();
}}

输出:

black
white

在上面的例子中,动物和狗类都有一个共同财产的颜色。如果我们打印颜色属性,它将打印当前类默认的颜色。访问父属性,我们需要使用super 关键字。

2)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();
}}

输出:

eating...
barking...

在上面的例子中两类动物和狗吃()方法,如果我们从狗类调用吃()方法,它将调用狗吃()方法的类在默认情况下因为是优先考虑本地。

调用父类方法,我们需要使用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();
}}

输出:

animal is created
dog is created

注意:super()由编译器自动添加在每个类的构造函数,如果没有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();
}}

输出:

animal is created
dog is created

super 的例子:真正的使用

让我们看看真正的super 关键字的使用。在这里,Emp类继承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();
}}

输出:

1 ankit 45000
赞(0)
未经允许不得转载:srcmini » Java super关键字

评论 抢沙发

评论前必须登录!