【问题标题】:abstract classes [duplicate]抽象类[重复]
【发布时间】:2011-07-26 08:13:42
【问题描述】:

可能重复:
Java: interface / abstract classes / abstract method

我有一个包含 4 个方法的抽象类。所有这些方法都是抽象的。 我的抽象类是否等同于接口?

public abstract class ABC{
  abstract void f1();
  abstract void f2();
  abstract void f3();
  abstract void f4();
 }

如果不是,谁能解释一下?

【问题讨论】:

标签: java


【解决方案1】:

没有。一个类可以“实现”多个接口,但只能“扩展”一个超类,包括抽象类。

【讨论】:

    【解决方案2】:

    AFAIK,Java 不像 C++ 那样支持多重继承。但是它支持多种实现(一个类可以实现多个接口)。

    因此,当您从ABC 继承时,您将无法从任何其他类继承。但是,如果你把它变成一个界面 - 你可以这样做。

    【讨论】:

      【解决方案3】:

      粗略地说没有。 一个类一次可以implements 多个接口,但您可以extend 只是一个抽象类。

      【讨论】:

        【解决方案4】:

        抽象类与接口的不同之处在于抽象类可能包含方法的具体实现,而接口可能不包含。

        例如,抽象类有这样的具体方法是合法的:

        public class Abstractclass{
         abstract void f1();
         /**
          * this is a concrete method with implementation 
          */
         void f2(){
          System.out.println("do something");
         }
        }
        

        但是对于接口,所有方法都是隐式抽象的。你不能有具体的方法:

        public interface InterfaceClass{
          void f2();
          void f3();
        }
        

        interface 对开发人员来说就像是一份合同,没有实施。它基本上指定了what。然后开发者实现这个接口来定义how。

        abstract 类包含一些对子类有用的实现。

        【讨论】:

          【解决方案5】:

          抽象类和接口之间有很多区别。我可以举几个例子(我不是 java 程序员,而是 C# 程序员,但认为这些差异仍然适用)。

          接口不是继承的,但抽象类是。如果您的编程语言不支持多重继承,这将很重要。

          接口不能包含代码,只有签名,抽象类可以包含代码。

          访问级别:private、protected、public 不能在接口中声明,而是在抽象类中。

          【讨论】:

            猜你喜欢
            • 2018-07-11
            • 2011-12-31
            • 1970-01-01
            • 2018-12-02
            • 2016-06-20
            • 2012-11-27
            • 2011-08-24
            • 2011-07-12
            • 1970-01-01
            相关资源
            最近更新 更多