我可以实例化一个Abstract类吗?如果是这样,为什么我不会将所有非密封类抽象出来?
如果我无法实例化它,那么界面有什么区别?抽象类可以具有“基类”功能吗?接口和抽象类之间的区别还有什么呢?
答案 0 :(得分:7)
您无法实例化抽象类。
抽象类和接口之间的区别在于抽象类可以具有方法的默认实现,因此如果不在派生类中重写它们,则使用抽象基类实现。接口不能有任何实现。
答案 1 :(得分:4)
接口不提供实现。您还可以实现多个接口。
您可以在抽象类中提供实现,但只能从一个基类型继承。
在任何一种情况下,都不能直接实例化任何一个。
答案 2 :(得分:1)
您无法直接创建抽象类的实例。但是,您可以提供方法和/或属性实现,这些方法和/或属性实现在接口中无法执行。此外,您只能继承一个类,抽象或其他类,而您可以继承(实现)任意数量的接口。
abstract class A
{
public int Foo() { return 1; } // implementation defined
}
class B : A
{
}
interface C
{
int Foo() {return 1;} // not legal, cannot provide implementation in interface
}
// ... somewhere else in code
A a = new A(); // not legal
A a = new B(); // legal
答案 3 :(得分:1)
抽象类:
抽象类可以包含抽象方法和非 摘要方法。
从抽象继承非抽象类时 类,非抽象类应提供所有 继承的抽象方法的实现。
接口:
界面只不过是纯抽象类,即 接口只能包含函数声明。
界面的所有成员都是Public by Default 并且您无法提供任何访问修饰符。
当一个类从接口继承时, 继承类应该提供实际的实现 继承的成员。
答案 4 :(得分:0)
首先:你只能从一个抽象类继承。您可以将多个接口连接到类。
答案 5 :(得分:0)
接口定义了一个合同,你说你将保证对一组特定方法签名的限制。
抽象类只是意味着你不能直接创建它的新实例,你可以自由使用任何其他类功能,即属性。