public class C {
public abstract Boolean methodC();
}
Class A implements C {
// all non-abstract methods
}
Class B extends A {
// all non-abstract methods
}
在Java中,
C
可以是抽象类 还是必须是一个界面? [注:它说 - '一个实施 C'。你能实现一个摘要吗? Java中的类?]
答案 0 :(得分:5)
以下是一些非常有用的术语说明:
接口:这是方法的集合。它们没有任何定义,它们的功能由实现它们的类决定。接口的示例是List。所有列表(ArrayList,LinkedList)都有add()和remove()方法,因为它们实现了 List 接口,这需要它们。
public interface List {
public void add (Object o);
public void remove (Object o);
}
public class MyList implements List {
public void add (Object o) {
// I must implement this method because of the interface List
}
public void remove (Object o) {
// I must implement this method because of the interface List
}
}
抽象类:这是一个部分完成的类。它与接口的不同之处在于它通常包含一些功能。但是,它(通常)缺少一些需要由* extend * ing子类定义的方法。这些方法在抽象超类中定义为 abstract 方法。
public abstract class AbstractThing {
public void method1 (Object o) {
// This is a real method that does things
}
// Anyone who extends me must implement this
public abstract void method2 (Object o1, Object o2);
}
public class ActualThing extends AbstractThing implements List {
public void add (Object o) {
// I must implement this method because of the interface List
}
public void remove (Object o) {
// I must implement this method because of the interface List
}
public void method2 (Object o1, Object o2) {
// I must implement this method because of abstract method in
// the super class
}
类使用 implements 关键字来表示它将实现接口所需的方法。一个类可以实现任意数量的接口;唯一的要求是它为每个方法提供了一个定义。它也可以定义为 abstract ,并依赖其子类来定义一些。然后,这些方法就像任何其他抽象类的抽象方法一样。
类使用 extends 关键字来表示它将向某个现有类添加功能。如果父类是抽象的,则扩展类必须在父类中实现任何这些抽象方法。一个类只能扩展一个父类。
为什么这么复杂?接口很好,因为您可以假设实现类的某些功能。具体情况是List接口。大多数方法都不关心他们得到什么样的列表;他们只是想知道该对象支持公共列表方法。在声明中:
List<String> myList = new ArrayList();
您正在创建一个实际的ArrayList对象,但在List接口下隐藏它的实现。然后,如果您决定使用LinkedList,则不必更改所有代码,因为它也在实现List接口。
Java还定义了几个“接口集”(例如持久性),但没有实现。这允许第三方开发自己的实现(实际类),但由于它们都实现了相同的公共接口,开发人员可以在不更改代码的情况下交换实现。
答案 1 :(得分:3)
A类无法实现C,因为C不是接口。
让我们理解它, java中的接口是类的蓝图。它只有静态常量和抽象方法。
java中的接口是一种实现完全抽象的机制。 java接口中只能有抽象方法而不是方法体。它用于在Java中实现完全抽象和多重继承。
Java接口代表IS-A关系。
它不能像抽象类一样实例化。
如下图所示,一个类扩展了另一个类,一个接口扩展了另一个接口,但类实现了一个接口。
答案 2 :(得分:2)
A类无法实现C,因为C不是接口。你扩展课程;你实现接口。
C看起来可以是抽象类或接口,因为您没有该方法的默认行为。
答案 3 :(得分:1)
在Java中,每个类只能扩展另外一个类,但它可以实现任意数量的接口。
C可以是接口,也可以是抽象类。
答案 4 :(得分:1)
C可以是;如果它是一个类,它必须被声明为“公共抽象类。”
答案 5 :(得分:1)
如果C是一个抽象类,那么A应该扩展C.另外,在定义C时,你需要在单词class之前使用abstract这个词。
如果C是接口,则在methodC之前删除“abstract”一词。
答案 6 :(得分:1)
任何具有所有抽象方法的类型通常都是一个接口,但没有什么能阻止它成为一个抽象类。因此,您的示例中的C可以是一个类,就像您拥有它一样。更常见的是它是一个界面。
你的A类声明它实现了C.类只能实现接口。所以,如果你想让C保持一个类,那么A将需要扩展C.如果你使C成为一个接口,那么使用implements就是正确的。
答案 7 :(得分:1)
以下是规则摘要:
extend
任意数量的接口。extend
一个类;如果您没有指定任何内容,它会扩展Object
。implement
任意数量的接口。abstract
。abstract
。abstract
。