以下程序有三处错误,请仔细阅读,找出错误并说明原因。 abstract class AbstractA{ abstract void f(){}; public abstract void k(); } class AbstractB extends AbstractA { protected void f(){ } void k() { System.out.print("I am subclass"); } public static void main(String[] args) { AbstractA a=new AbstractA (); a.f(); a.k(); } }
时间: 2024-01-17 10:06:00 浏览: 141
c#中的interface abstract与virtual介绍
以下是修改后的程序段:
```
abstract class AbstractA {
abstract void f();
public abstract void k();
}
class AbstractB extends AbstractA {
protected void f() {}
public void k() {
System.out.print("I am subclass");
}
public static void main(String[] args) {
AbstractA a = new AbstractB(); // 将 AbstractA 类型的 a 对象实例化为 AbstractB 类的对象
a.f();
a.k();
}
}
```
修改说明:
1. `AbstractA` 中的 `f()` 方法声明为抽象方法时不应该加上花括号。
2. 在 `AbstractB` 类中,`f()` 方法应该声明为 `protected` ,因为子类需要继承它。
3. `AbstractA` 类是抽象类,不能直接实例化,需要将 `a` 对象实例化为 `AbstractB` 类的对象。
4. `AbstractB` 类中的 `k()` 方法应该声明为 `public`,因为它是实现了 `AbstractA` 中的抽象方法。
5. `main()` 方法需要加上 `public` 修饰符。
因此,原程序的错误是:`AbstractA` 类不能直接实例化,`f()` 方法声明不正确,`k()` 方法需要声明为 `public`。
阅读全文