超级关键字使用示例
super 关键字在三个地方扮演重要角色
- 构造函数级别
- 方法级别
- 可变等级
构造函数级别
super
关键字用于调用父类构造函数。此构造函数可以是默认构造函数或参数化构造函数。
-
默认构造函数:
super();
-
参数化构造函数:
super(int no, double amount, String name);
class Parentclass { Parentclass(){ System.out.println("Constructor of Superclass"); } } class Subclass extends Parentclass { Subclass(){ /* Compile adds super() here at the first line * of this constructor implicitly */ System.out.println("Constructor of Subclass"); } Subclass(int n1){ /* Compile adds super() here at the first line * of this constructor implicitly */ System.out.println("Constructor with arg"); } void display(){ System.out.println("Hello"); } public static void main(String args[]){ // Creating object using default constructor Subclass obj= new Subclass(); //Calling sub class method obj.display(); //Creating object 2 using arg constructor Subclass obj2= new Subclass(10); obj2.display(); } }
注意 :super()
必须是构造函数中的第一个语句,否则我们将得到编译错误消息。
方法级别
super
关键字也可以在方法重写的情况下使用。super
关键字可用于调用或调用父类方法。
class Parentclass
{
//Overridden method
void display(){
System.out.println("Parent class method");
}
}
class Subclass extends Parentclass
{
//Overriding method
void display(){
System.out.println("Child class method");
}
void printMsg(){
//This would call Overriding method
display();
//This would call Overridden method
super.display();
}
public static void main(String args[]){
Subclass obj= new Subclass();
obj.printMsg();
}
}
注意 :如果没有方法重写,那么我们不需要使用 super
关键字来调用父类方法。
可变等级
super
用于引用直接父类实例变量。在继承的情况下,可能有基类和派生类可能有类似的数据成员。为了区分基类/父类和派生/子类的数据成员,在派生类的上下文中基类数据成员必须以 super
关键字开头。
//Parent class or Superclass
class Parentclass
{
int num=100;
}
//Child class or subclass
class Subclass extends Parentclass
{
/* I am declaring the same variable
* num in child class too.
*/
int num=110;
void printNumber(){
System.out.println(num); //It will print value 110
System.out.println(super.num); //It will print value 100
}
public static void main(String args[]){
Subclass obj= new Subclass();
obj.printNumber();
}
}
注意 :如果我们不在基类数据成员名称之前写入 super
关键字,那么它将被称为当前类数据成员,而基类数据成员将隐藏在派生类的上下文中。