super关键字功能及调用
2023-04-03 15:01:57
从英语本意来看,super表示「超级的」,但是从java的继承体系上来说,与子类相比,父类是「超级的」,因此,有时我们也称父类为超类(super-class)。简而言之,super可以理解为指向自己超级(父亲)对象的指针,而这个超级对象指的是最接近自己的父亲。Super关键词的核心知识点在于关键词super功能及调用。
super关键字出现在子类中的主要目的是在子类中调用父类的属性或方法。虽然子类通过继承拥有一些父类数据成员或方法,但如果你想操作这些父类成员(数据或方法),你必须父类亲自上阵。而关键词super是父子合作的桥梁。
Super关键字它可以用于子类,通过点号(.)获取父类成员的变量和方法。super也可用于子类子类,Java 它可以自动追溯到上层。父类行为被调用,就像这种行为是这种行为一样,调用行为不必发生在父类中,可以自动追溯到上层。Super关键词的这一特点与其功能相辅相成,使其在java编程中的利用率居高不下。
1)super关键词的功能:
1.调用父亲的声明 private 的变量。
2.点取已覆盖的方法。
3.父类结构法作为方法名表示。
调用隐藏变量和被覆盖的方法:
public class Demo{
public static void main(String[] args) {
Dog obj = new Dog();
obj.move();
}
}
class Animal{
private String desc = "Animals are human's good friends";
// 必须声明一个 getter 方法
public String getDesc() { return desc; }
public void move(){
System.out.println("Animals can move");
}
}
class Dog extends Animal{
public void move(){
super.move(); // 调用父亲的方法
System.out.println("Dogs can walk and run");
// 通过 getter 调用父类隐藏变量的方法
System.out.println("Please remember: " + super.getDesc());
}
}
运行结果:
Animals can move
Dogs can walk and run
Please remember: Animals are human's good friends
move() 方法也可以定义为一些祖先类别,如父类父类,Java 可追溯性,会一直向上寻找,直到找到这种方法。
通过 super 要调用父类的隐藏变量,必须在父类中声明 getter 方法,因为声明是 private 对子类来说,数据成员是看不见的。
2)调用父类结构方法:
在许多情况下,父类对象的初始化采用默认结构方法。当然也可以用关键词super显示调用父类的结构方法。
public class Demo{
public static void main(String[] args) {
Novel obj = new Novel("平凡的世界", 30);
obj.say();
}
}
Class Book{
String name;
public Book(String name){
this.name = name;
}
}
class Novel extends Book{
int price;
public Novel(String name, int price){
super(name);
this.price= price;
}
public void say(){
System.out.println("我刚买了一本书,它的名字叫" + name + ",花了" + age + "");
}
}
运行结果:
我刚买了一本名为普通世界的书,花了很多钱30
在调用父类结构方法时,需要注意的是,在结构方法中调用另一种结构方法,调用动作必须放在起始位置。除了结构方法之外,结构方法不能在任何方法中调用。一种结构方法只能在一种结构方法中调用。
当子类中的成员变量或方法与父类中的成员变量或方法同名时,使用区分super:
class Person{
protected String name;
public Person(String name) {
this.name = name;
}
}
class Student extends Person{
private String name;
public Student(String name, String name1) {
super(name);
this.name = name1;
}
public void getInfo(){
System.out.println(this.name); //Child
System.out.println(super.name); //Father
}
}
public class Test {
public static void main(String[] args) {
Student s1 = new Student("Father","Child");
s1.getInfo();
}
}
降到super关键字很容易让人联想到this关键字。如果你写了一个结构方法,它既没有被调用 super() 也没有调用 this()编译器将自动插入调用到父体结构的方法中,而无需参数。最后注意 super 与 this 的区别:super 不是对象的引用,不能引用 super 赋值给另一个对象变量,它只是一个特殊的关键字,指示编译器调用父类方法。super()在子类中调用父类的结构方法,this()调用本类的其他结构方法。
Super关键词知识广阔的java关键词之一,默默为java的各种函数和方法结构贡献力量。如果你想掌握更多的java关键词,你可以看看这个网站java基础课程,更多关键词的知识瑰宝等着你去拿。