public class Temp {
public static void main(String args[]) {
A ref;
B objB = new B();
C objC = new C();
ref = objB;
ref.show();
ref = objC;
ref.show();
}
}
abstract class A {
abstract void show();
{
System.out.println("In Class A");
}
}
class B extends A {
void show() {
System.out.println("In class B");
}
}
class C extends B {
void show() {
System.out.println("In Class C");
}
}
Run Code Online (Sandbox Code Playgroud)
在上面的代码中抽象方法包含了方法的定义.但是在书中说明抽象方法应该只包含该方法的声明而非定义.当我执行此程序时,它会导致以下输出没有任何错误.请解释我如何显示以下输出.
In Class A
In Class A
In class B
In Class C
Run Code Online (Sandbox Code Playgroud)
您的抽象类不包含方法的定义.您的抽象类包含一个抽象方法和一个初始化块.
abstract class A {
// Abstract method
abstract void show();
// Initializer block, completely unrelated to show
{
System.out.println("In Class A");
}
}
Run Code Online (Sandbox Code Playgroud)
初始化程序块在构造对象时运行 - 与构造函数类似(但是您可以有多个,并且它们不能有参数).这跟你写的完全一样:
abstract class A {
// Abstract method
abstract void show();
// Constructor
public A()
{
System.out.println("In Class A");
}
}
Run Code Online (Sandbox Code Playgroud)
输出来自:
A ref;
B objB = new B(); // calls B's constructor, then A's constructor which prints "In Class A"
C objC = new C(); // calls C's constructor, then A's constructor which prints "In Class A"
ref = objB;
ref.show(); // prints "In Class B"
ref = objC;
ref.show(); // prints "In Class C"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
70 次 |
| 最近记录: |