Met*_*uru 0 java abstract-class interface
我真的很困惑,而且我已经阅读了很多关于这个主题的问题,而且我无法明确指出一个接口可以做抽象类无法做到的事情.
接口可以做什么,抽象类不能做?
我问我的Java类的情况下,但它是否适用于其他语言随意删除Java标签(可能是C#?).
编辑:我知道抽象类可以做界面不能做的事情,但是如果抽象类可以完成界面可以做的所有事情,那么界面的重点是什么?"实现多个接口"是什么意思?
这样的接口不能做抽象类所做的事情.
这是因为抽象类可以包含代码 - 接口不能.但是任何给定的类只能有一个超类 - extends而不是任意数量的接口 - implements所以如果你使用抽象类,你基本上把自己画在继承树的一角,因为你的类只能扩展一个类.
此限制不适用于接口,允许单个类具有多种用途,具体取决于它实现的接口数量.
您不能从c#中的多个抽象类继承,但可以实现多个接口.
我认为这也适用于java
编辑:
您不能从多个类继承.如果你有一个名为Clonable的抽象类,以及一个名为Disposable的抽象类,那么你只能继承其中一个类,并且你不得不决定你的类应该是哪个类的子类型:
例如:
public abstract class Clonable
{
public abstract void Clone();
}
public abstract class Disposable
{
public abstract void Dispose();
}
// MyClass cannot be Disposable too, it is not allowed by the language
public class MyClass : Clonable
{
override void Clone()
{
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,这是一种语言的设计决策,只允许您从一个类继承.
另一方面,如果您有接口,则该语言允许您实现这两种接口
例如
public interface IClonable
{
void Clone();
}
public interface IDisposable
{
void Dispose();
}
public class MyClass : IClonable, IDisposable
{
void IClonable.Clone()
{
}
void IDisposable.Dispose()
{
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
804 次 |
| 最近记录: |