当前位置: 首页 > 知识库问答 >
问题:

重写VS子类[重复]

诸嘉澍
2023-03-14

也许我对概念感到困惑,但是重写和在子类中创建一个新方法之间有什么区别呢?重写不就是在子类中创建一个不同于父类的新的特定方法吗?但这难道不是在子类中创建一个新方法所要做的吗?

共有1个答案

夏昊
2023-03-14

重写方法的要点是签名保持不变,但具有不同的功能。它还确保可以以与超类实现相同的方式调用该方法,甚至可以从存储在具有实现该方法的超类的类型的变量中的对象调用该方法。

示例:

class HelloWorld {
   public void say() {
      System.out.println("Hello world!");
   }
}

class HelloJava extends HelloWorld {
   @Override
   public void say() {
       System.out.println("Hello Java!");
   }
}

public class Main {
    public static void main(String[] args) {
        // Example 1. Instance type: HelloWorld, Variable type: HelloWorld
        HelloWorld h1 = new HelloWorld();
        h1.say();

        // Example 2. Instance type: HelloJava, Variable type: HelloJava
        HelloJava h2 = new HelloJava();
        h2.say();

        // Example 3. Instance type: HelloJava, Variable type: HelloWorld
        HelloWorld h3 = new HelloJava();
        h3.say();
    }
}

输出:

Hello world!
Hello Java!
Hello Java!
 类似资料:
  • 也许我对概念感到困惑,但是重写和在子类中创建一个新方法之间有什么区别呢?重写不就是在子类中创建一个不同于父类的新的特定方法吗?但这难道不是在子类中创建一个新方法所要做的吗?

  • 问题内容: 就Java而言,当有人问: 什么是多态性? 将超载或重载是一个可以接受的答案? 我认为还有更多。 如果你有一个抽象基类,它定义了一个没有实现的方法,并且你在子类中定义了该方法,那该方法是否仍然覆盖? 我认为过载不是肯定的正确答案。 问题答案: 表达多态性的最清晰方法是通过抽象基类(或接口) 此类是抽象的,因为该方法不适用于人类。只有男性和女性子类别才可以定义。同样,人类是一个抽象的概念

  • 阻止子类重写 final 可以通过标记为final来阻止一个方法、属性或者下标脚本被重写. 通过在方法、属性或者下标脚本的关键字前写final修饰符(比如final var, final func, final class func, final subscript) 此时由于加上了final修饰, 此方法不允许子类重写

  • 日安, 我对Java相当陌生。我开始学习的第一门语言是C++。在C++中,我使用了一个新的.cpp文件将代码分散到多个文件中,这样代码就不会太过聚集。我只会在需要的时候使用classes(例如,根据学生的姓名、地址、电话号码等对一所学校的学生进行分类)。但是现在我改成了Java,当我不想对某些东西进行分类时,我很难理解如何使用类。假设我想将代码分散在多个.java文件中,这样它就不会被聚集。当创建

  • 熟悉Java,但对静态编程语言相当陌生。 当子类参数与超类val同名时... Android Studio不会抛出验证错误,说明需要@Overder注释。但是,尝试从Business中访问引用参数而不是超类val(我觉得这就像覆盖)。 当然,我可以将参数命名为不同的名称,但我真的只想将名称传递给超类......否则不包括它在中的任何存储。 我忽略了什么吗?我很惊讶,即使我没有将FirstBusin

  • 在java中,我们可以缩小返回类型和throws异常类型(甚至删除throws子句): 但是,参数类型呢(如果A采用< code>T,那么为什么B不采用< code >?超级T)如: 让我们考虑一下我认为完全符合逻辑的这段代码: 所以我要说的是,在使用的代码上下文中仍然有效。