gpt4 book ai didi

java - 了解 Java 中抽象类的用途

转载 作者:搜寻专家 更新时间:2023-10-30 19:49:24 26 4
gpt4 key购买 nike

假设我有两个类,A 和 B。A 类被定义为抽象类,而 B 扩展了这个抽象类,最后我测试了结果,两个类都是同一个包的一部分。

public abstract class A {

protected abstract void method1();

protected void method2() {
System.out.println("This is Class A's method");
}
}

public class B extends A {

@Override
protected void method1() {
System.out.println("This is B's implementaiton of A's method");
}
}

现在当我测试它们时:

B b = new B();
b.method1();
b.method2();

我得到了预期的输出:

This is B's implementaiton of A's method
This is Class A's method

问题:

  • @Override 关键字的用途是什么,因为如果我省略它,它仍然有效。
  • 如果我不实现抽象方法,就会出现编译错误。那么与实现接口(interface)有什么区别呢?
  • 另外,我也可以在 B 中实现 method2()。那么输出就变成了B中使用的,这不也是覆盖了父类的方法吗?那么在 A 类中将方法显式定义为抽象的目的是什么?

最佳答案

  1. @Override 不是关键字,它是一个可选的注释,可帮助编译器检查您是否确实在覆盖方法。如果你说 @Override 但是没有方法可以覆盖,编译器会告诉你你可能打错了字。将method1重命名为method12,看看效果。
  2. 接口(interface)不能有任何实现,而抽象类可以选择性地为其某些方法提供实现。此外,接口(interface)不能有数据成员。
  3. 将方法定义为抽象方法意味着派生类必须提供一个实现。不将其声明为抽象表示派生类只是可以提供它们自己的实现,但它们不需要。

关于java - 了解 Java 中抽象类的用途,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9197521/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com