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

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

  • 我从《实践中的Java并发》(Java Concurrency in Practice)一书中读到了以下关于volatile的内容: 当一个字段被声明为volatile时,编译器和运行时会注意到这个变量是共享的,对它的操作不应该与其他内存操作一起重新排序。易失性变量不会缓存在寄存器或缓存中,在这些寄存器或缓存中它们对其他处理器是隐藏的,因此对易失性变量的读取总是返回任何线程最近的写入。 可变变量的

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

  • 问题内容: 这个问题已经在这里有了答案 : 7年前关闭。 可能重复: mysql_fetch_array,mysql_fetch_assoc,mysql_fetch_object 我想要一个可以将结果集当前行中的字段返回到关联数组并将结果指针移至下一行的函数。 混淆之间 我应该使用哪一个?任何帮助,将不胜感激。谢谢。 问题答案: 注 :使用的功能被认为是 过时 ,你应该使用的东西,提供了更好的安全

  • 为了实现上述行为,minSDKversion、targetSDKversion和MAXSDKVersion的值应该是什么? 除了minSDKversion、targetSDKversion和maxSDKversion值之外,我是否需要在请求权限时显式地检查java代码中的API级别?