具有所有具体方法的普通类和具有所有具体方法的抽象类有什么区别

时间:2015-09-06 13:03:47

标签: java abstract-class

假设一个抽象类,其中包含所有三种方法,并且都是具体方法,与具有所有三种方法的普通类相比,这些方法也是具体的。

它们在应用程序中有什么区别,因为它们现在基本上用于相同的目的。为什么这是允许的?

拿一个抽象的课,让我们说:

abstract class A {
    public void open() {} 
    public void close() {} 
    public void pull() {}
}

正常班级:

class A {
    public void open() {} 
    public void close() {} 
    public void pull() {}
}

它们之间有什么区别,因为如果我们删除abstract关键字,则两者都相同。

任何人都可以解释一下吗?

3 个答案:

答案 0 :(得分:1)

您无法实例化抽象类。一个区别是你如何实例化它们:

A a = new A(); // for normal class
A a = new A(){}; // for abstract class with no abstract with no abstract memebers

第二行创建A的 annonynous 子类的实例。

答案 1 :(得分:1)

具体类可以实例化,但抽象类不能无论如何。编译器不关心类是否具有抽象成员。一个抽象类无法实例化!当您实例化一个没有带有匿名内部类的抽象成员的抽象类时,您不需要花括号中的任何内容。那是因为所有方法都已实施。我想这算是另一个区别。

答案 2 :(得分:0)

虽然@Bohemian是对的,abstract类,extend类,abstract类中的所有abstract方法都必须实现到extend类中{1}}我们的abstract课程。例如,这不起作用。

<强> MyClass的

public class MyClass extends AbstractClass {

}

<强>抽象类

public abstract class AbstractClass {
    public abstract void test();
}

MyClass必须包含AbstractClass类中的所有方法。此外,所有abstract方法都不能拥有正文。