java - 关于抽象类的两个概念让我困惑

标签 java abstract

我很困惑,因为我在书中发现了两个我认为不正确的概念。请帮我澄清这两点。

  1. 一旦一个类具有一个或多个抽象方法,该类就是抽象的,即使它没有声明为抽象(尽管强烈建议这样做)。这是正确的:

    class A
    { 
       public abstract void f() ; // OK
       .....
    }
    

    尽管如此,A 被认为是抽象的并且是一个表达式,例如 new A(...) 将会被拒绝。

  2. 抽象方法必须声明为 public,这是合乎逻辑的,因为它的目的是在子类中重新定义。

第一点给了我一个错误,第二点是不必要的。我走在正确的道路上吗?

最佳答案

  1. 错了。您不能在非abstract 类中声明abstract 方法。

  2. 错了。您也可以拥有 protected 或包本地抽象方法。

关于接口(interface)有一个特殊规则:接口(interface)中的方法始终公共(public)抽象。在定义接口(interface)时指定任何这些修饰符都是多余的:

public interface Foo
{
    /* public abstract is implied here */ void bar();
}

关于java - 关于抽象类的两个概念让我困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22392999/

相关文章:

java - 将对象添加到 Inherited FirebaseMessagingService 继承服务 (FCM) 的类上的 Realm 数据库

java - 如何强制 Firefox 使用 java web start 打开页面?

java - 使用继承(使用抽象类)在自定义框架内为子类提供一小部分方法的更优雅的方式?

scala - scala中抽象类型类的初始化问题

C# - 在子类中调用个别行为后在抽象类中添加公共(public)行为

Java解析数组列表中的前一个元素

java - 有关 java swing/GridBagLaytout 的帮助

java - 使用枚举值作为字符串文字

c++ - 为什么我必须在 C++ 的派生类中重新声明被覆盖的函数?

groovy - 特征中的私有(private)抽象声明给出静态上下文错误