我已经有好几年没有用Java编码了,以前也没有适当地修改这个概念。最近,我在某处读到,如果一个实现抽象类但不从中实现单个方法的类必须是抽象的。是真的还是其他意思?我自己尚未尝试过此操作,因为当前我的PC无法正常工作,并且在线编译器在加载时卡住了。是这样吗预先感谢。
答案 0 :(得分:2)
“当抽象类被子类化时,子类通常为其父类中的所有抽象方法提供实现。但是,如果没有,则子类也必须声明为抽象。”
如果我们要尝试执行以下操作:
abstract class A {
abstract void draw();
abstract void paint();
}
class B extends A {
public void draw() {
System.out.print("B implements A draw");
}
public void paint() {
Systemout.print("B implements A paint");
}
}
class C extends A {
public void draw() {
System.out.print("B implements A draw");
}
}
public class Main {
public static void main(String[] args) {
System.out.println("Hello world!");
B b = new B();
C c = new C();
b.draw();
b.paint();
c.draw();
c.paint();
}
}
然后我们将收到以下编译器错误C is not abstract and does not override abstract method paint() in A
但是,如果我们将C定义为抽象类,然后创建一个具体的类D
,则该类将简单地扩展C如下:
abstract class C extends A {
public void draw() {
System.out.print("C implements A draw");
}
}
class D extends C {
public void paint() {
System.out.print("D implements A paint");
}
}
并且当然将我们的main方法更新到现在实例化类D而不是C的位置(因为我们无法实例化抽象类),然后我们获得了成功的编译和运行时间。因此,作为答案,是的,如果您拥有一个extends
抽象类的类,但是没有实现所有方法,那么它也必须是抽象的。我希望我能回答你的问题;我的经验主要是.NET,而我在Java方面已经过时了
答案 1 :(得分:2)
否。
规则是:
答案 2 :(得分:1)
当然可以。抽象类A没有任何方法,子类B扩展了A并且未声明为抽象。
abstract class A {
//empty
}
class B extends A {
public void draw() {
System.out.print("B implements A draw");
}
}
public class Main {
public static void main(String[] args) {
B b = new B();
b.draw();
}
}
答案 3 :(得分:0)
abstract class Class1 {
int val = 0;
abstract public int doit();
public int done() {
return val;
}
}
以下内容不会编译。所有抽象方法都必须实现。
class Child1 extends Class1 {
}
以下内容将编译。继承的抽象方法和子类中的方法不必实现。
abstract class Child2 extends Class1 {
}
您可以在Java语言规范中阅读有关Abstract classes的更多信息。