教妹学Java(三十三):super 关键字的用法

简介: 教妹学Java(三十三):super 关键字的用法

三妹开学了,学的计算机软件编程。她学校离我家很近,坐公交车也就 10 站路的距离, 每逢周末她都会来找我,让我辅导她学习 Java。作为一名拥有十余年编程经验的程序员,再加上父母给我们的这份血缘关系,我觉得义不容辞。


“二哥,今天我们要学习的内容是‘super 关键字’,对吧?”看来三妹已经提前预习了我上次留给她的作业。


“是的,三妹。super 关键字有很多用法。 ”我面带着朴实无华的微笑回答着她,“最常用的一个是,它可以作为一引用变量,指向父类对象。”


“每当创建一个子类对象的时候,也会隐式的创建父类对象,由 super 关键字引用。”


----正儿八经的分割线,正文开始------------


01、super 关键字有哪些用法


下面给出了 super 关键字的 三种用法:


指向父类对象;

调用父类的方法;

super() 可以调用父类的构造方法。


02、 指向父类对象


如果父类和子类拥有同样名称的字段,super 关键字可以用来访问父类的同名字段:


/**
 * @author 微信搜「沉默王二」,回复关键字 PDF
 */
public class ReferParentField {
    public static void main(String[] args) {
        new Dog().printColor();
    }
}
class Animal {
    String color = "白色";
}
class Dog extends Animal {
    String color = "黑色";
    void printColor() {
        System.out.println(color);
        System.out.println(super.color);
    }
}



在上面的例子中,父类 Animal 中有一个名为 color 的字段,子类 Dog 中也有一个名为 color 的字段,子类的 printColor() 方法中,通过 super 关键字可以访问父类的 color。程序输出的结果如下所示:


黑色

白色



03、调用父类的方法


super 关键字同样可以用于调用父类的方法,当子类和父类的方法名相同时,这很有用,换句话说,super 关键字可以用于方法重写时访问到父类的方法。


/**
 * @author 微信搜「沉默王二」,回复关键字 PDF
 */
public class ReferParentMethod {
    public static void main(String[] args) {
        new Dog().work();
    }
}
class Animal {
    void eat() {
        System.out.println("吃...");
    }
}
class Dog extends Animal {
    @Override
    void eat() {
        System.out.println("吃...");
    }
    void bark() {
        System.out.println("汪汪汪...");
    }
    void work() {
        super.eat();
        bark();
    }
}



在上面的例子中,父类 Animal 和子类 Dog 中都有一个名为 eat() 的方法,通过 super.eat() 可以访问到父类的 eat() 方法。


04、调用父类的构造方法


super() 可用于调用父类的构造方法,来看下面这个示例:


/**
 * @author 微信搜「沉默王二」,回复关键字 PDF
 */
public class ReferParentConstructor {
    public static void main(String[] args) {
        new Dog();
    }
}
class Animal {
    Animal(){
        System.out.println("动物来了");
    }
}
class Dog extends Animal {
    Dog() {
        super();
        System.out.println("狗狗来了");
    }
}



子类 Dog 的构造方法中,第一行代码为 super(),它就是用来调用父类的构造方法的。来看一下输出结果:


动物来了

狗狗来了

1

2

当然了,在默认情况下,super() 是可以省略的,编译器会主动去调用父类的构造方法。也就是说,子类即使不使用 super() 主动调用父类的构造方法,父类的构造方法仍然会先执行。


/**
 * @author 微信搜「沉默王二」,回复关键字 PDF
 */
public class ReferParentConstructor {
    public static void main(String[] args) {
        new Dog();
    }
}
class Animal {
    Animal(){
        System.out.println("动物来了");
    }
}
class Dog extends Animal {
    Dog() {
        System.out.println("狗狗来了");
    }
}



输出结果如下所示。


动物来了

狗狗来了

1

2

super() 也可以用来调用父类的有参构造方法,这样可以提高代码的可重用性。


/**
 * @author 微信搜「沉默王二」,回复关键字 PDF
 */
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);
    }
}
public class CallParentParamConstrutor {
    public static void main(String[] args) {
        new Emp(1, "沉默王二", 20000f).display();
    }
}



Emp 类继承了 Person 类,也就继承了 id 和 name 字段,当在 Emp 中新增了 salary 字段后,构造方法中就可以使用 super(id, name) 来调用父类的有参构造方法。


来看一下程序的输出结果:


1 沉默王二 20000.0


05、ending


“三妹,super 关键字我们就学到这里吧,它的用法我相信你一定全部掌握了。”我揉一揉犯困的双眼,疲惫地给三妹说。


“好的,二哥,我这就去练习去。”三妹似乎意犹未尽,这种学习状态真令我感到开心。


相关文章
|
9月前
|
缓存 安全 Java
Volatile关键字与Java原子性的迷宫之旅
通过合理使用 `volatile`和原子操作,可以在提升程序性能的同时,确保程序的正确性和线程安全性。希望本文能帮助您更好地理解和应用这些并发编程中的关键概念。
244 21
|
8月前
|
Java C语言
课时8:Java程序基本概念(标识符与关键字)
课时8介绍Java程序中的标识符与关键字。标识符由字母、数字、下划线和美元符号组成,不能以数字开头且不能使用Java保留字。建议使用有意义的命名,如student_name、age。关键字是特殊标记,如蓝色字体所示。未使用的关键字有goto、const;特殊单词null、true、false不算关键字。JDK1.4后新增assert,JDK1.5后新增enum。
168 4
|
7月前
|
存储 安全 Java
深入理解 Java 中的 instanceof 关键字
本文深入解析了 Java 中的 `instanceof` 关键字,探讨其在类型判断中的作用。作为二元操作符,`instanceof` 可用于检查对象是否为某类实例或实现特定接口,避免类型转换异常 (`ClassCastException`)。文章通过多态性下的类型判断、安全类型转换、接口实现检测及集合元素类型判定等实际应用场景,展示了 `instanceof` 的强大功能。掌握该关键字可提高代码健壮性,确保运行时类型安全。
559 0
|
11月前
|
移动开发 前端开发 Java
Java最新图形化界面开发技术——JavaFx教程(含UI控件用法介绍、属性绑定、事件监听、FXML)
JavaFX是Java的下一代图形用户界面工具包。JavaFX是一组图形和媒体API,我们可以用它们来创建和部署富客户端应用程序。 JavaFX允许开发人员快速构建丰富的跨平台应用程序,允许开发人员在单个编程接口中组合图形,动画和UI控件。本文详细介绍了JavaFx的常见用法,相信读完本教程你一定有所收获!
10384 5
Java最新图形化界面开发技术——JavaFx教程(含UI控件用法介绍、属性绑定、事件监听、FXML)
|
11月前
|
存储 缓存 Java
Java 并发编程——volatile 关键字解析
本文介绍了Java线程中的`volatile`关键字及其与`synchronized`锁的区别。`volatile`保证了变量的可见性和一定的有序性,但不能保证原子性。它通过内存屏障实现,避免指令重排序,确保线程间数据一致。相比`synchronized`,`volatile`性能更优,适用于简单状态标记和某些特定场景,如单例模式中的双重检查锁定。文中还解释了Java内存模型的基本概念,包括主内存、工作内存及并发编程中的原子性、可见性和有序性。
309 5
Java 并发编程——volatile 关键字解析
|
10月前
|
Java 编译器 开发者
Java中的this关键字详解:深入理解与应用
本文深入解析了Java中`this`关键字的多种用法
1670 9
|
10月前
|
JSON Java 数据挖掘
利用 Java 代码获取淘宝关键字 API 接口
在数字化商业时代,精准把握市场动态与消费者需求是企业成功的关键。淘宝作为中国最大的电商平台之一,其海量数据中蕴含丰富的商业洞察。本文介绍如何通过Java代码高效、合规地获取淘宝关键字API接口数据,帮助商家优化产品布局、制定营销策略。主要内容包括: 1. **淘宝关键字API的价值**:洞察用户需求、优化产品标题与详情、制定营销策略。 2. **获取API接口的步骤**:注册账号、申请权限、搭建Java开发环境、编写调用代码、解析响应数据。 3. **注意事项**:遵守法律法规与平台规则,处理API调用限制。 通过这些步骤,商家可以在激烈的市场竞争中脱颖而出。
|
11月前
|
缓存 安全 Java
Java volatile关键字:你真的懂了吗?
`volatile` 是 Java 中的轻量级同步机制,主要用于保证多线程环境下共享变量的可见性和防止指令重排。它确保一个线程对 `volatile` 变量的修改能立即被其他线程看到,但不能保证原子性。典型应用场景包括状态标记、双重检查锁定和安全发布对象等。`volatile` 适用于布尔型、字节型等简单类型及引用类型,不适用于 `long` 和 `double` 类型。与 `synchronized` 不同,`volatile` 不提供互斥性,因此在需要互斥的场景下不能替代 `synchronized`。
3427 3
|
JavaScript 前端开发 Java
java中的this关键字
欢迎来到我的博客,我是瑞雨溪,一名热爱JavaScript与Vue的大一学生。自学前端2年半,正向全栈进发。若我的文章对你有帮助,欢迎关注,持续更新中!🎉🎉🎉
194 9
|
设计模式 JavaScript 前端开发
java中的static关键字
欢迎来到瑞雨溪的博客,博主是一名热爱JavaScript和Vue的大一学生,致力于全栈开发。如果你从我的文章中受益,欢迎关注我,将持续分享更多优质内容。你的支持是我前进的动力!🎉🎉🎉
258 8
下一篇
oss云网关配置