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

时间:2014-03-13 23:14:53

标签: java abstract

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

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

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

    然而,A被认为是抽象的,并且表达如新的A(...) 将被拒绝。

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

  3. 第一点给我一个错误,第二点没有必要。我在正确的道路上吗?

2 个答案:

答案 0 :(得分:3)

  1. 错误。您无法在非abstract类中声明abstract方法。

  2. 错误。您也可以使用protected或包本地abstract方法。

  3. 有关接口的一条特殊规则:接口中的方法始终 public abstract。在定义接口时指定任何这些修饰符是多余的:

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

答案 1 :(得分:3)

这本书完全错了。我建议回收它。

  1. 包含abstract方法的类必须声明abstract
  2. 抽象方法需要声明public - 除了 private
  3. 之外,它可以是的任何内容