抽象类和具有抽象所有方法的类有什么区别?

时间:2010-08-05 20:55:10

标签: java abstract-class

我想知道 abstract 类和一个包含所有方法 abstract 的类之间的Java有什么区别?我的意思是,抽象类只是一个类,其方法自动获取 abstract

5 个答案:

答案 0 :(得分:22)

绝对不是。实际上,一个类可以是抽象的,而任何方法都是抽象的,尽管这种方法相对较少(参见下面的Mark的评论)。另一方面,如果一个类有任何抽象方法,那么必须被声明为抽象。

一般来说,抽象类的目的是为骨架提供某些非抽象行为,但其他位仍由子类填充。例如,这可以与template method pattern一起使用。

答案 1 :(得分:1)

任何包含一个或多个抽象方法的类也必须声明为abstract。要声明类抽象,只需在类声明开头的class关键字前面使用abstract关键字。可以没有抽象类的对象。也就是说,不能使用new运算符直接实例化抽象类。这样的对象没用,因为抽象类没有完全定义。此外,您不能声明抽象构造函数或抽象静态方法。抽象类的任何子类都必须实现超类中的所有抽象方法,或者本身声明为抽象方法。

答案 2 :(得分:1)

抽象类和接口之间的唯一区别是抽象类可以继承而接口不能,因此接口没有任何构造函数与抽象类相反。

答案 3 :(得分:0)

每当你在类中创建一个抽象方法时,你就在类名之前明确提到了abstract关键字,就像这样

public abstract class Test {

abstract void show();

}

以下是Java中与Abstract相关的要点

- >抽象类是无法实例化的类之一。

- >如果你想从子类(其他人)获得任何方法的实现,那么抽象方法可以在这个意义上使用。

- >抽象类是不完整的,子类必须声明缺失的片段才能成为具体类(其对象可以实例化的类),否则这些子类也成为抽象类。

- >您可以通过"抽象类"来实现抽象,这是OOP的主要支柱。 抽象隐藏了对象的无关细节。

- > IS A Relationship(继承)的抽象用法。

- >用于实现多态行为的抽象(OOP的另一个主要支柱)

- >抽象类不应该是私有的,也不应包含私有方法。

- >您扩展单个抽象类而不是多个,因为Java是单个支持的继承

- >抽象类必须包含1个或多个抽象方法

- >如果任何类包含抽象方法,那么它应该显式声明抽象类,即使它包含具体方法。

- >构造函数和静态方法不能声明为抽象,因为构造函数不是继承的。

- >如果子类没有实现超类的抽象方法,那么它也变成了抽象类。

- >尝试实例化抽象类的对象是编译错误。

- >抽象超类变量可以保存子具体对象的引用。

答案 4 :(得分:0)

在其声明中包含abstract关键字的类称为抽象类

  • 抽象类可能包含也可能不包含抽象方法,即带有out的方法(public void get();)
  •    
  • 但是,如果一个类至少有一个抽象方法,那么该类必须被声明为abstract。
  •     
  • 如果一个类被声明为abstract,则无法实例化。
  •     
  • 要使用抽象类,必须从另一个类继承它,为其中的抽象方法提供实现。
  •    
  • 如果继承了一个抽象类,则必须为其中的所有抽象方法提供实现。

如果您不想为所有抽象方法提供实现,那么适配器类概念: 例如:

abstract class A{
    public void m1();
    public void m2();
    public void m3();
    }

class B extends A{
    public void m1(){}
    public void m2(){}
    public void m3(){}
    }


class C extends B{
    public void m2(){
       System.out.println("Hello m2");
       }
    public static void main(String args){
     C obj=new C();
    C.m2();
    }
    }