我真的很困惑,我已经阅读了关于这个主题的一些问题,而且我还没有能够明确指出一个接口可以做什么,一个抽象类无法做到的事情。我发现很多关于抽象类和接口的问题,但回答我:抽象类可以完成一个接口可以做的所有事情吗?
抽象类不能做什么接口可以做什么?
我要求我的Java类的情况下,但它是否适用于其他语言随意删除Java标签(可能是C#?)。
编辑:我的理解是一个抽象类,可以做的事情的接口可以不要,但如果一个抽象类,可以做一切的接口可以做,那么什么是接口的意义呢? “实现多个接口”是什么意思?
我真的很困惑,我已经阅读了关于这个主题的一些问题,而且我还没有能够明确指出一个接口可以做什么,一个抽象类无法做到的事情。我发现很多关于抽象类和接口的问题,但回答我:抽象类可以完成一个接口可以做的所有事情吗?
抽象类不能做什么接口可以做什么?
我要求我的Java类的情况下,但它是否适用于其他语言随意删除Java标签(可能是C#?)。
编辑:我的理解是一个抽象类,可以做的事情的接口可以不要,但如果一个抽象类,可以做一切的接口可以做,那么什么是接口的意义呢? “实现多个接口”是什么意思?
不能从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()
{
}
}
请注意,这是允许您只能从一个类继承的语言的设计决策。
如果您有接口另一方面,语言可以让你同时实现
例如
public interface IClonable
{
void Clone();
}
public interface IDisposable
{
void Dispose();
}
public class MyClass : IClonable, IDisposable
{
void IClonable.Clone()
{
}
void IDisposable.Dispose()
{
}
}
这样的接口不能做抽象类所做的事情。
这是因为抽象类可以包含代码 - 接口不能。但是任何给定的类只能有一个超类 - extends
- 与任何数量的接口相反 - implements
,所以如果你使用抽象类,你基本上将自己绘制在继承树的一个角落,因为你的类只能扩展一个类。
此限制不适用于接口,允许一个类有许多用途取决于它实现了多少接口。
接口是不可实例化的类,它只包含子类可以继承的方法。接口可以做的唯一事情(在java中)是一个类可以实现多个接口,而一个类只能扩展1个抽象类。
interfaces也可以用在代理中,抽象类可以'吨。这在各种框架中被广泛使用。 – MeBigFatGuy 2011-03-24 00:39:54
你不能实例化一个抽象类吗? – BigOmega 2011-03-24 01:38:32
您不能@Ryan,但您可以在抽象类中声明构造函数,但从不在接口中声明。 – 2011-03-24 08:49:25
博学多闻:
什么是 “实现多个接口” 是什么意思?
考虑:
public static interface Ifun extends Comparable<Ifun>, Serializable {}//or
public static class Cfun2 implements Comparable<Cfun>, Serializable
当类实现Ifun
,则:
Collections.sort
自动排序。这意味着对象可以有多个1接口。
+1:这也适用于java。 – 2011-03-24 00:27:55
我将如何从多个类继承?你能提供一个代码示例吗?你是什么意思:实现多个接口? – BigOmega 2011-03-24 01:37:12
我编辑了我的回复。我只能真的给你一个在C#中的代码示例,也许有人可以在Java中给予等效的,如果有帮助 – 2011-03-24 02:39:22