JavaSE-面向对象(方法重写)

下面是详细讲解"JavaSE-面向对象(方法重写)"的完整攻略:

什么是方法重写?

Java中,当子类继承父类时,如果子类需要对父类中的某个方法进行重新实现,那么就可以使用方法重写。方法重写的核心是子类中的方法与父类中的方法拥有相同的名称和参数列表,但是子类中的方法具备不同的实现。

方法重写的语法

子类中的方法必须与父类中的方法具备相同的名称和参数列表,并且具备相同的返回类型或其子类类型。此外,子类中的方法的访问修饰符不能低于父类中的方法(可以等于或高于),而且子类中的方法不能抛出父类方法的“检查型异常”的更多异常类型。

方法重写的语法示例:

public class Parent {
    public void printMessage() {
        System.out.println("Hello, world!");
    }
}

public class Child extends Parent {
    @Override
    public void printMessage() {
        System.out.println("Hello, Java!");
    }
}

方法重写的示例解释

上面的示例代码定义了一个名为Parent的类,其中包含一个名为printMessage的方法。该方法只是简单地打印一条“Hello, world!”的消息。当子类Child继承了Parent类时,它重新实现了printMessage方法。子类中的方法与父类中的方法拥有相同的名称和参数列表,但是子类中的方法具备不同的实现,它打印出了一条不同的消息“Hello, Java!”

下面对这个示例进行进一步解释:

Parent parent = new Parent();
Child child = new Child();

parent.printMessage();   // 输出 "Hello, world!"
child.printMessage();    // 输出 "Hello, Java!"

在这段代码中,首先创建了一个名为parent的Parent类对象,然后调用了该对象的printMessage方法。结果是输出一条“Hello, world!”的消息。接下来,创建了一个名为child的Child类对象,并调用了该对象的printMessage方法。结果是输出一条“Hello, Java!”的消息。这是因为重写方法时,子类中的方法具有优先权,即在子类中调用重写后的方法时,将运用子类中的定义和实现。

方法重写的注意事项

1.访问修饰符:子类中的方法的访问修饰符不能低于父类中的方法(可以等于或高于)。

2.返回类型:子类中的方法的返回类型必须是相同的或是其子类。

3.参数列表:子类中的方法参数列表必须与父类中的方法完全相同。

4.异常类型:子类中的方法不能抛出父类方法的“检查型异常”的更多异常类型。

5.注解“@Override”:如果子类覆盖重写了父类中的方法,为了避免在不知情的情况下重写了父类中本不存在的方法,可以在子类重写该方法上面加上“@Override”注解。

实例说明

下面再给出一个实例说明,通过比较不同的方法重写方式,来理解方法重写的细节。

public class Shape {
    public void draw() {
        System.out.println("draw a shape");
    }
}

public class Circle extends Shape {
    @Override
    public void draw() {
        System.out.println("draw a circle");
    }

    public void printMessage() {
        System.out.println("this is a circle");
    }
}

public class Main {
    public static void main(String[] args) {
        Shape s = new Shape();
        Circle c = new Circle();
        Shape sc = new Circle();

        s.draw();     // 输出“draw a shape”
        c.draw();     // 输出“draw a circle”
        sc.draw();    // 输出“draw a circle”
        // sc.printMessage();    // 编译错误,因为Shape类型的引用无法访问子类Circle中新增的方法
    }
}

在这个示例程序中,定义了一个名为Shape的类,其中包含一个名为draw的方法。同时,还定义了一个名为Circle的类,它继承了Shape,并重新实现了draw方法。此外,在Circle类中新增了一个名为printMessage的方法。

在main方法中,创建了三个对象s、c、sc。s是Shape类型的对象,c是Circle类型的对象,sc是Shape类型的对象,但是将Circle的对象赋值给它。在调用这三个对象的draw方法时,输出的分别是“draw a shape”,“draw a circle”和“draw a circle”。这表明在sc对象中,虽然它是Shape类型的引用,但是调用draw方法时,运用的是Circle类中重写的draw方法。因为方法的运行结果取决于对象实际的类型(即对象引用的类型),而不是对象在定义时声称的类型(即对象类型声明时的类型)。此外,在调用sc的printMessage方法时,编译器会报错,因为Shape类型的引用无法访问子类Circle中新增的方法。

这个示例旨在强调方法重写的一个细节:子类中的方法不但可以重写父类中的方法,还可以添加新的方法。但是在使用时,应该注意对象的实际类型。如果使用了父类类型的引用,那么该引用是不可能调用子类新增的方法的。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JavaSE-面向对象(方法重写) - Python技术站

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

相关文章

  • java Date类详解及使用总结

    Java Date类详解及使用总结 什么是Java Date类 在Java中,Date类代表了一个日期或者时间的抽象概念。Date类中包含了当前日期和时间的信息,可以通过它来进行日期和时间的操作。 Date类的构造方法 Date类有下面三个构造方法: public Date() 创建一个表示当前时间的Date对象。 public Date(long date…

    Java 2023年5月20日
    00
  • Java8优雅的字符串拼接工具类StringJoiner实例代码

    下面是关于“Java8优雅的字符串拼接工具类StringJoiner实例代码”的完整攻略。 什么是StringJoiner StringJoiner是Java 8中提供的一个字符串拼接工具类。它可以将多个字符串按照指定的分隔符连接起来,并可以指定前缀和后缀,从而生成一个完整的字符串。 StringJoiner的构造方法 public StringJoiner…

    Java 2023年5月26日
    00
  • 详解如何在SpringBoot中自定义参数解析器

    下面我将详细讲解如何在SpringBoot中自定义参数解析器。 一、参数解析器 在SpringBoot中,我们可以通过继承HandlerMethodArgumentResolver接口来自定义参数解析器。 public interface HandlerMethodArgumentResolver { // 判断是否支持该参数类型的解析 boolean su…

    Java 2023年6月16日
    00
  • 堆区的作用是什么?

    以下是关于 Java 堆区的详细讲解和使用攻略: 堆区的作用是什么? Java 堆区(Heap)是一种用于存储对象实例的内存区域。堆区是线程共享的,其大小可以通过 -Xmx 和 -Xms 参数进行设置。 堆区的使用攻略 使用 Java 堆区,需要注意以下几点: 在程序开发中需要合理使用存,避免出现内存泄漏和内存溢出等问题。 在实现自定义的类时,需要注意对象的…

    Java 2023年5月12日
    00
  • java运算符实例用法总结

    Java 运算符实例用法总结 在 Java 中,运算符用于对常量、变量和表达式进行操作。通过组合常量、变量和表达式,可以创建复杂的表达式,从而实现对数据的处理和计算。 本文将介绍 Java 常见的运算符及其用法。 赋值运算符(=) 赋值运算符(=)用于将右侧的值赋给左侧的变量。例如: int a = 10; int b; b = a; 在上面的示例中,变量 …

    Java 2023年5月23日
    00
  • Spring连接Mysql数据库的实现步骤

    下面是关于Spring连接MySQL数据库的实现步骤的攻略: 简介 Spring 是一个轻量级的开源框架,提供了依赖注入(DI)和面向切面编程(AOP)等特征,可用于创建企业级应用程序。而 MySQL 是一个开源的关系型数据库,被广泛应用于各种类型的应用程序。在Spring应用程序中,可以使用Spring JDBC来连接MySQL数据库。 连接MySQL数据…

    Java 2023年5月20日
    00
  • Java解压zip文件完整代码分享

    好的。首先,我们需要使用Java代码解压缩一个ZIP文件。下面是代码实现的过程: 步骤1:导入Java ZIP库 首先,我们需要在项目中导入Java的ZIP库,这可以通过在POM.xml文件中添加以下依赖项来实现: <dependency> <groupId>org.apache.commons</groupId> &lt…

    Java 2023年5月20日
    00
  • IDEA教程创建SpringBoot前后端分离项目示例图解

    下面我来详细讲解“IDEA教程创建SpringBoot前后端分离项目示例图解”的完整攻略。 简介 首先,让我们来了解一下前后端分离项目的概念。前后端分离是指将前端和后端代码分别开发,并通过API进行数据交互的一种开发方式。它可以有效提高开发效率和代码可维护性,并且使得前后端团队的分工更加明确。 在本教程中,我们将使用IntelliJ IDEA来创建一个前后端…

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