首页 > 编程语言 >Java super关键字

Java super关键字

时间:2023-02-02 22:22:14浏览次数:40  
标签:Java Dog 关键字 Animal 父类 super class

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

每当创建子类的实例时,父类的实例被隐式创建,由super关键字引用变量引用。

java super关键字的用法如下:

  • super可以用来引用直接父类的实例变量。
  • super可以用来调用直接父类方法。
  • super()可以用于调用直接父类构造函数。

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

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

class Animal {
    String color = "white";
}

class Dog extends Animal {
    String color = "black";

    void printColor() {
        System.out.println(color);// prints color of Dog class
        System.out.println(super.color);// prints color of Animal class
    }
}

class TestSuper1 {
    public static void main(String args[]) {
        Dog d = new Dog();
        d.printColor();
    }
}
Java

执行上面代码,输出结果如下 -

black
white
Java

在上面的例子中,AnimalDog都有一个共同的属性:color。 如果我们打印color属性,它将默认打印当前类的颜色。 要访问父属性,需要使用super关键字指定。

2. 通过 super 来调用父类方法

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

class Animal {
    void eat() {
        System.out.println("eating...");
    }
}

class Dog extends Animal {
    void eat() {
        System.out.println("eating bread...");
    }

    void bark() {
        System.out.println("barking...");
    }

    void work() {
        super.eat();
        bark();
    }
}

class TestSuper2 {
    public static void main(String args[]) {
        Dog d = new Dog();
        d.work();
    }
}
Java

执行上面代码,输出结果如下 -

eating...
barking...
Java

在上面的例子中,AnimalDog两个类都有eat()方法,如果要调用Dog类中的eat()方法,它将默认调用Dog类的eat()方法,因为当前类的优先级比父类的高。
所以要调用父类方法,需要使用super关键字指定。

3. 使用 super 来调用父类构造函数

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

class Animal {
    Animal() {
        System.out.println("animal is created");
    }
}

class Dog extends Animal {
    Dog() {
        super();
        System.out.println("dog is created");
    }
}

class TestSuper3 {
    public static void main(String args[]) {
        Dog d = new Dog();
    }
}
Java

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

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

下面是super关键字的另一个例子,这里super()由编译器隐式提供。

class Animal {
    Animal() {
        System.out.println("animal is created");
    }
}

class Dog extends Animal {
    Dog() {
        System.out.println("dog is created");
    }
}

class TestSuper4 {
    public static void main(String args[]) {
        Dog d = new Dog();
    }
}
Java

执行上面代码,输出结果如下 -

animal is created
dog is created
Java

super实际使用示例

下面来看看super关键字的实际用法。 在这里,Emp类继承了Person类,所以Person的所有属性都将默认继承到Emp。 要初始化所有的属性,可使用子类的父类构造函数。 这样,我们重用了父类的构造函数。

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);// reusing parent constructor
        this.salary = salary;
    }

    void display() {
        System.out.println(id + " " + name + " " + salary);
    }
}

class TestSuper5 {
    public static void main(String[] args) {
        Emp e1 = new Emp(1, "ankit", 45000f);
        e1.display();
    }
}
Java

执行上面代码,输出结果如下 -

1 ankit 45000
//更多请阅读:https://www.yiibai.com/java/super-keyword.html#article-start

标签:Java,Dog,关键字,Animal,父类,super,class
From: https://www.cnblogs.com/cnetsa/p/17087595.html

相关文章

  • Java方法重写
    如果子类中具有与父类中声明相同的方法,在java中称为方法覆盖。换句话说,如果子类提供了由其父类提供的其中一个方法的特定实现,则它被称为方法覆盖。所以方法覆盖有两个前提......
  • Java方法重载
    如果一个类中有多个具有相同名称但参数不同的方法,则称为方法重载。如果只需要执行一个操作,具有相同的方法名称将增加程序的可读性。假设必须执行给定数值的添加操作(求和......
  • 《深入理解Java虚拟机》第三章读书笔记(二)——HotSpot垃圾回收算法实现(OopMap,安全点安
    系列文章目录和关于我前面《深入理解Java虚拟机》第三章读书笔记(一)——垃圾回收算法我们学习了垃圾回收算法理论知识,下面我们关注下HotSpot垃圾回收算法的实现,分为以下几......
  • 使用VSCode创建Maven工程测试Java代码
    使用VSCode创建Maven工程测试Java代码发生缘由使用VSCode创建Maven工程测试Java代码环境介绍电脑系统:win10VSCode版本:1.72.0(usersetup)开始搭建搭建......
  • Java 基础语法
    @目录Java基础语法标识符&关键字数据类型1.数据类型的介绍2.类型转换变量运算符包机制JavaDoc文档注释Scanner类流程控制1.1if选择结构1.2switch(匹配)选择结构2.1......
  • JAVA-基础-包
    java、javax、org、sun包都是jdk提供的类包,且都是在rt.jar中。rt.jar是JAVA基础类库(java核心框架中很重要的包),包含lang在内的大部分功能,而且rt.jar默认就在根classloader的......
  • 细节决定成败:探究Mybatis中javaType和ofType的区别
    开启掘金成长之旅!这是我参与「掘金日新计划·12月更文挑战」的第24天,点击查看活动详情一.背景描述今天,壹哥给学生讲解了Mybatis框架,学习了基础的ORM框架操作及多对一......
  • Java继承
    Java中的继承是一种机制,表示为一个对象获取父对象的所有属性和行为。在Java中继承是:可以创建基于现有类构建新的类。当您从现有类继承时,就可以重复使用父类的方法和字段......
  • Java this关键字
    在java中,this关键字有很多种用法。在java中,这是一个引用当前对象的引用变量。javathis关键字的用法如下:this关键字可用来引用当前类的实例变量。this关键字可用于调......
  • Java多线程
    多线程目录多线程概述多线程:好处与弊端JVM中的多线程解析如何创建一个线程呢?内存与线程名称获取内存:获取线程名称:多线程的创建一:继承Thread类继承Thread类步骤:继承Thread......