假设一个抽象类,其中包含所有三种方法,并且都是具体方法,与具有所有三种方法的普通类相比,这些方法也是具体的。
它们在应用程序中有什么区别,因为它们现在基本上用于相同的目的。为什么这是允许的?
拿一个抽象的课,让我们说:
abstract class A {
public void open() {}
public void close() {}
public void pull() {}
}
正常班级:
class A {
public void open() {}
public void close() {}
public void pull() {}
}
它们之间有什么区别,因为如果我们删除abstract
关键字,则两者都相同。
任何人都可以解释一下吗?
答案 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
方法都不能拥有正文。