动力节点旗下在线教育品牌  |  咨询热线:400-8080-105 学Java全栈,上蛙课网
首页 > 文章

super关键字功能及调用

07-24 17:24 225浏览
举报 T字号
  • 大字
  • 中字
  • 小字

从英文本意来说,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基础课程,更多关键字的知识瑰宝等你来拿。

0人推荐
共同学习,写下你的评论
0条评论
无心出岫
程序员无心出岫

10篇文章贡献51071字

作者相关文章更多>

推荐相关文章更多>

Java数据结构

HelloWorld10-31 08:24

浅谈MySQL中SQL优化的常用方法

军哥08-12 23:29

五分钟读懂UML类图

江湖人称小李白12-10 10:41

MyBatis开发框架的四大核心

IT逐梦者08-17 21:43

一次搞定continue,break和return

HelloWorld11-06 11:19

发评论

举报

0/150

取消