假设一个抽象类包含所有三个方法,并且都是具体方法,与之相比,一个普通类包含所有三个方法,也是具体方法。
它们在应用程序中的区别是什么,因为它们现在基本上服务于相同的目的。为什么这是允许的?
以一个抽象类为例,假设:
abstract class A {
public void open() {}
public void close() {}
public void pull() {}
}和一个普通的类:
class A {
public void open() {}
public void close() {}
public void pull() {}
}它们之间的区别是什么,因为如果我们去掉abstract关键字,那么两者是相同的。
有人能解释一下吗?
发布于 2015-09-06 21:09:21
你不能实例化一个抽象类。一个不同之处在于实例化它们的方式:
A a = new A(); // for normal class
A a = new A(){}; // for abstract class with no abstract with no abstract memebers第二行创建了A的一个无序子类的实例。
发布于 2015-09-06 21:11:44
具体类可以实例化,但抽象类无论如何都不能实例化。编译器并不关心类是否有抽象成员。抽象类不能被实例化!当你用匿名内部类实例化一个没有抽象成员的抽象类时,你不需要花括号中的任何东西。这是因为所有的方法都被实现了。我想这是另一个区别。
发布于 2015-09-06 21:16:06
虽然@Bohemian是正确的,但当extended时,也是一个abstract类,abstract类中的所有abstract方法都必须实现到extend我们的abstract类的类中。例如,这不起作用。
MyClass
public class MyClass extends AbstractClass {
}AbstractClass
public abstract class AbstractClass {
public abstract void test();
}MyClass必须包含AbstractClass类中的所有方法。此外,所有abstract方法都不能有主体。
https://stackoverflow.com/questions/32423883
复制相似问题