以下程序有三处错误,请仔细阅读,找出错误并说明原因。 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-18 13:05:07 浏览: 79
这段程序存在三处错误,分别如下:
1. 抽象类 AbstractA 的抽象方法 f() 存在方法体,这是错误的。抽象方法本身没有实现,因此不应该有方法体。应该将 AbstractA 类的 f() 方法修改为以下形式:
```
abstract void f();
```
2. 抽象类 AbstractA 不能被实例化。在 main() 方法中,将 AbstractA 类实例化为对象 a 的语句是错误的。应该将 a 的类型修改为 AbstractB,即:
```
AbstractB a = new AbstractB();
```
3. 在 AbstractB 类中,方法 f() 的访问修饰符应该改为 public。因为在父类 AbstractA 中,f() 的访问修饰符是 abstract,表示它是一个抽象方法,需要在子类中进行实现。如果在子类中将 f() 的访问修饰符改为 protected,那么就无法在 AbstractB 中对 f() 进行实现,会导致编译错误。应该将 AbstractB 类的 f() 方法修改为以下形式:
```
public void f() { }
```
修改后的程序如下所示:
```
abstract class AbstractA {
abstract void f();
public abstract void k();
}
class AbstractB extends AbstractA {
public void f() { }
public void k() {
System.out.print("I am subclass");
}
}
public class Main {
public static void main(String[] args) {
AbstractB a = new AbstractB();
a.f();
a.k();
}
}
```
阅读全文