查看原文
其他

【Java编程教程】详解Java super 关键字

点击关注 👉 Java面试那些事儿 2023-09-01

整理:Java面试那些事儿


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


每当您创建子类的实例时,都会隐式创建父类的实例,该实例由super引用。


# Java super 关键字的使用


  1. super 可用于引用直接父类实例变量。

  2. super 可用于调用直接父类方法。

  3. super() 可用于调用直接父类构造函数。


# super 用于引用直接父类实例变量。


我们可以使用 super 关键字来访问父类的数据成员或字段。如果父类和子类具有相同的字段,则使用它。


class Animal{ String color="白色的"; } class Dog extends Animal{ String color="黑色的"; void printColor(){ System.out.println(color); // 打印 Dog 类的颜色 System.out.println(super.color);//打印Animal类的颜色 class } } class TestSuper1{ public static void main(String args[]){ Dog d=new Dog(); d.printColor(); }}


输出:

黑色的白色的


在上面的例子中,Animal 和 Dog 这两个类都有一个共同的属性颜色。如果我们打印颜色属性,它会默认打印当前类的颜色。要访问父属性,我们需要使用 super 关键字。


# super可以用来调用父类的方法


super 关键字也可用于调用父类方法。如果子类包含与父类相同的方法,则应使用它。换句话说,如果方法被覆盖,则使用它。


class Animal{ void eat(){System.out.println("吃...");} } class Dog extends Animal{ void eat(){System.out.println("吃面包...");} void bark(){System.out.println("叫声...");} void work(){ super.eat(); bark(); } } class TestSuper2{ public static void main(String args[]){ Dog d=new Dog(); d.work(); }}


输出:

吃...叫声...


在上面的例子中,Animal 和 Dog 两个类都有 eat() 方法,如果我们从 Dog 类调用 eat() 方法,它会默认调用 Dog 类的 eat() 方法,因为本地优先。关注公众号Java面试那些事儿,获取651页Java面试题


要调用父类方法,我们需要使用 super 关键字。


# super用于调用父类的构造函数。


super 关键字也可以用来调用父类的构造函数。让我们看一个简单的例子:

class Animal{ Animal(){System.out.println("动物被创建");} } class Dog extends Animal{ Dog(){ super(); System.out.println("狗被创建"); } } class TestSuper3{ public static void main(String args[]){ Dog d=new Dog(); }}


输出:

动物被创建狗被创建

注意:如果没有 super() 或 this(),编译器会自动在每个类的构造函数中添加 super()。


众所周知,如果没有构造函数,编译器会自动提供默认构造函数。但是,它还添加了 super() 作为第一条语句。


super 关键字的另一个示例,其中 super() 由编译器隐式提供。


class Animal{ Animal(){System.out.println("动物被创建");} } class Dog extends Animal{ Dog(){ System.out.println("狗被创建"); } } class TestSuper4{ public static void main(String args[]){ Dog d=new Dog(); }}


输出:

动物被创建狗被创建


# 超级示例:实际使用


让我们看看 super 关键字的真正用法。这里Emp类继承了Person类,所以Person的所有属性默认都会继承给Emp。为了初始化所有属性,我们使用子类的父类构造函数。这样,我们就重用了父类的构造函数。关注公众号Java面试那些事儿,获取651页Java面试题


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);//重用父构造函数 this.salary=salary; } void display(){System.out.println(id+" "+name+" "+salary);} } class TestSuper5{ public static void main(String[] args){ Emp e1=new Emp(1,"小安",45000f); e1.display(); }}


输出:


1 小安 45000



程序员技术交流群


扫码进群记得备注:城市、昵称和技术方向


热门推荐:


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存