抽象类和接口有什么区别?
可能重复:
接口与抽象类(通用OO)
我可以实例化一个Abstract类吗? 如果是这样,为什么我不会将所有非密封类抽象化?
如果我无法实例化它,那么界面有什么区别? 抽象类可以具有“基础”类function吗? 接口和抽象类之间的区别是什么?
您无法实例化抽象类。
抽象类和接口之间的区别在于抽象类可以具有方法的默认实现,因此如果不在派生类中重写它们,则使用抽象基类实现。 接口不能有任何实现。
接口不提供实现。 您还可以实现多个接口。
您可以在抽象类中提供实现,但只能从一个基类型inheritance。
在任何一种情况下,您都无法直接实例化任何一个。
您无法直接创建抽象类的实例。 但是,您可以提供方法和/或属性实现,这些方法和/或属性实现在界面中无法执行。 此外,您只能inheritance一个类,抽象或其他类,而您可以inheritance(实现)任意数量的接口。
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
抽象类:
-
抽象类可以包含抽象方法和非抽象方法。
-
当非抽象类inheritance自抽象类时,非抽象类应提供inheritance的抽象方法的所有实现。
接口:
-
接口只是纯抽象类,即接口只能包含函数声明。
-
界面的所有成员都是Public by Default,您无法提供任何访问修饰符。
-
当从接口inheritance类时,inheritance的类应该为inheritance的成员提供实际的实现。
一方面:您只能从一个抽象类inheritance。 您可以将多个接口连接到类。
界面定义了一个合同,你的意思是你将保证对一组特定方法签名的限制。
抽象类只是意味着你不能直接创建它的新实例,你可以自由地使用任何其他类特性,即属性。