Java super关键字的用法详解

yizhihongxing

Java super关键字的用法详解

简介

在Java中,有一个关键字叫作“super”,用于访问父类的属性和方法。它常常与子类的构造器和方法一起使用。本文将详细讲解Java super关键字的用法。

访问父类的属性和方法

子类继承父类后,可以访问到父类的公共(public)属性和方法。如果父类和子类定义了同名的属性和方法,那么子类访问的会是自己的属性和方法,父类的属性和方法会被隐藏。

子类使用super关键字,可以访问到父类的公共属性和方法,即使父类和子类定义了同名的属性和方法也一样。

访问父类的属性

子类使用super关键字可以访问到父类的公共属性,如下所示:

public class Animal {
    protected int age;

    public Animal(int age) {
        this.age = age;
    }
}

public class Bird extends Animal {
    private String color;

    public Bird(int age, String color) {
        super(age); // 父类的构造器
        this.color = color;
    }

    public void printAge() {
        System.out.println(super.age); // 访问父类的属性
    }
}

在Bird类中,使用super.age可以访问到父类Animal的age属性。

访问父类的方法

子类使用super关键字可以访问到父类的公共方法,如下所示:

public class Animal {
    protected void sing() {
        System.out.println("Animal is singing");
    }
}

public class Bird extends Animal {
    private String color;

    public void sing() {
        System.out.println("Bird is singing");
        super.sing(); // 调用父类的方法
    }
}

在Bird类中,使用super.sing()可以调用父类Animal的sing()方法。

调用父类的构造器

子类的构造器中默认会调用父类的无参构造器,如果父类没有提供无参构造器,子类必须手动调用父类的构造器。在Java中,使用super关键字可以调用父类的构造器。

在构造器中调用父类的构造器

子类的构造器中使用super关键字可以调用父类的构造器,如下所示:

public class Animal {
    protected int age;

    public Animal(int age) {
        this.age = age;
    }
}

public class Bird extends Animal {
    private String color;

    public Bird(int age, String color) {
        super(age); // 调用父类的构造器
        this.color = color;
    }
}

在Bird类的构造器中,使用super(age)调用父类Animal的构造器。这里注意,调用父类的构造器必须放在子类的构造器中的第一行。

示例说明

示例1

下面的示例代码展示了如何使用super关键字访问父类的属性和方法:

public class Animal {
    protected int age;

    public Animal(int age) {
        this.age = age;
    }

    public void sing() {
        System.out.println("Animal is singing");
    }
}

public class Bird extends Animal {
    private String color;

    public Bird(int age, String color) {
        super(age); // 调用父类的构造器
        this.color = color;
    }

    public void printAge() {
        System.out.println(super.age); // 访问父类的属性
    }

    public void sing() {
        System.out.println("Bird is singing");
        super.sing(); // 调用父类的方法
    }
}

public class Main {
    public static void main(String[] args) {
        Bird bird = new Bird(3, "red");
        bird.printAge(); // 访问父类的属性
        bird.sing(); // 调用父类和子类的方法
    }
}

上面的示例代码中,演示了如何使用super关键字访问父类的属性和方法。

示例2

下面的示例代码展示了如何使用super关键字调用父类的构造器:

public class Animal {
    protected int age;

    public Animal(int age) {
        this.age = age;
    }
}

public class Bird extends Animal {
    private String color;

    public Bird(int age, String color) {
        super(age); // 调用父类的构造器
        this.color = color;
    }
}

public class Main {
    public static void main(String[] args) {
        Bird bird = new Bird(3, "red");
    }
}

上面的示例代码中,演示了如何使用super关键字调用父类的构造器。

总结

Java super关键字有访问父类的属性和方法、调用父类构造器的作用,它可以让子类使用父类的属性和方法,保证程序的可扩展性。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java super关键字的用法详解 - Python技术站

(0)
上一篇 2023年6月26日
下一篇 2023年6月26日

相关文章

  • Android中实现ProgressBar菊花旋转进度条的动画效果

    Android中实现ProgressBar菊花旋转进度条的动画效果攻略 ProgressBar是Android中常用的进度条控件之一,可以用于显示任务的进度。为了增加用户体验,我们可以为ProgressBar添加一个菊花旋转的动画效果。下面是实现这一效果的完整攻略。 步骤一:创建ProgressBar 首先,在XML布局文件中添加一个ProgressBar控…

    other 2023年9月7日
    00
  • 易语言对数据库操作之“取字段尺寸”命令用法

    易语言对数据库操作之“取字段尺寸”命令用法详解 什么是数据库字段尺寸? 在数据库中,每个字段都有其数据类型和长度,长度也叫做尺寸。尺寸是指该字段能够存储的最大字节数或者字符个数,通常以字节或字符数表示。在对数据库进行操作时,我们有时需要获取某个字段的尺寸,以便进行一些相关的操作,比如保证输入数据不超过字段长度限制。 易语言中的“取字段尺寸”命令 在易语言中,…

    other 2023年6月25日
    00
  • es6入门阮一峰

    以下是详细讲解“ES6入门阮一峰的完整攻略,过程中至少包含两条示例说明”的标准Markdown格式文本: ES6入门阮一峰的完整攻略 ES6是JavaScript的下一代标准,引入了许多新的语法和特性,使得JavaScript更加强大和易于使用。本攻略将介绍ES6的基本语法和特性,包括let和const、箭头函数、模板字符串、解构赋值、默认参数、展开运算符、…

    other 2023年5月10日
    00
  • 项目中使用Typescript封装axios

    一、什么是 Typescript Typescript 是JavaScript 的一个超集,它不仅支持JavaScript的语法,还增加了许多新的特性。最重要的是,Typescript 具有类型检查的能力,能在编译时即可检查出代码中的类型错误,提高了代码的可靠性和可维护性。 二、什么是 Axios Axios 是一个基于Promise 的HTTP 客户端,用…

    other 2023年6月25日
    00
  • Java递归和迭代区别详细介绍

    Java递归和迭代区别详细介绍 Java递归和迭代都是程序中重要的控制结构。递归和迭代都可以用来解决相同的问题,但是它们在实现和执行上有很大的区别。本文将详细介绍Java递归和迭代的区别和使用。 什么是递归 递归是指在程序执行过程中调用自身来解决问题的方法。在递归中,函数会多次调用自身,并通过改变参数的值来进行不同的求解。 例如,下面的代码使用递归来计算阶乘…

    other 2023年6月27日
    00
  • Win10系统内置Windows应用无法正常启动打开的解决方法

    下面是针对“Win10系统内置Windows应用无法正常启动打开的解决方法”的完整攻略,包含以下步骤: 问题分析 首先,要明确一下出现该问题的原因,可能的原因有以下几种: 应用丢失或损坏; Windows Update导致的系统问题; 权限问题; 其他软件或驱动程序干扰。 解决方法 针对以上可能的原因,我们可以执行以下步骤进行排查和修复: 步骤一:尝试使用 …

    other 2023年6月25日
    00
  • 铭飞mcms初步学习

    以下是关于“铭飞mcms初步学习”的完整攻略,包括基本知识和两个示例。 基本知识 铭飞mcms是一款基于PHP的内容管理系统,它提供了丰富的功能和易于使用的界面,使用户可以轻松地创建和管理网站。以下是使用铭飞mcms的基本步骤: 下载并安装铭飞mcms。 在铭飞mcms的官方网站上下载并安装铭飞mcms。 登录并配置铭飞mcms。 在浏览器中打开铭飞mcms…

    other 2023年5月7日
    00
  • python-如何使用pipfile和pipfile.lock?

    Python – 如何使用Pipfile和Pipfile.lock? Pipfile和Pipfile.lock是Python项目中的依赖管理工具,可以帮助我们更好地管理项目依赖。本文将介如何使用Pipfile和Pfile.lock。 1. 安装Pipenv 在使用Pipfile和Pipfile.lock之前,我们需要先装Pipenv。在命令行中执行以下命令即…

    other 2023年5月8日
    00
合作推广
合作推广
分享本页
返回顶部