当前位置: 首页 > 图灵资讯 > 技术篇> super关键字功能及调用

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基础课程,更多关键词的知识瑰宝等着你去拿。