interface Com { int M = 200; int f(); } class ImpCom implements Com { int f(){return 100;} }为什么会报错
时间: 2024-05-14 17:17:49 浏览: 175
这段代码中没有明确指定 `ImpCom` 类实现 `Com` 接口中的哪个方法。由于 `Com` 接口中只有一个 `f()` 方法,因此需要在 `ImpCom` 类中实现该方法。
修改代码如下:
```
interface Com {
int M = 200;
int f();
}
class ImpCom implements Com {
public int f() {
return 100;
}
}
```
这样就可以成功编译了。注意,实现接口中的方法时需要指定 `public` 访问修饰符。
相关问题
将下列A,B,C,D哪个代码普换下列源文件Com.java 中的【代码】 不会导致编译错误? public interface Com { int M = 200; int f(); } class ImpCom implements Com { 【代码】 public int f() { return 100+M; A.' int f( { return 100; B. ) public double f () f return 2.6; c. I D.?ublic abstract int f0;
正确答案是A,将下列代码替换至Com.java中不会导致编译错误:
```
public interface Com {
int M = 200;
int f();
}
class ImpCom implements Com {
public int f() {
return 100+M;
}
}
```
原因是,ImpCom类实现了Com接口,并重写了接口中的f()方法,因为接口中的f()方法是public abstract的,所以ImpCom类中的f()方法必须是public的,并且返回类型和参数列表必须与接口中定义的f()方法一致。在A选项中,ImpCom类正确地重写了f()方法,因此可以被编译通过。而B、C、D选项中,都存在语法错误,会导致编译失败。
下面定义接口Com,接口的实现类ImpCom,阅读代码,描述正确的是() interface Com{ int M=200; int f(); } class ImpCom implements Com{ int M=10; public int f(){ return M+10; } } public class Test { public static void main(String[] args) { ImpCom im=new ImpCom(); System.out.println(im.f()); System.out.println(Com.M); } } 选择一项或多项: a. 在实现类ImpCom中,拥有接口继承的常量M和新定义的M,方法f中M是新定义的M。继承的常量M被隐藏,但是不能通过super来访问。 b. 运行Test类后,输出结果为: 20 200 c. 在实现类中对接口中的常量访问可以用super.M或者Com.M d. 实现类ImpCom中重写f方法,访问控制可以为public 或者友元
正确选项为a、b、c。解析如下:
a. 在实现类ImpCom中,拥有接口继承的常量M和新定义的M,方法f中M是新定义的M。继承的常量M被隐藏,但是不能通过super来访问。
在实现类ImpCom中,定义了一个和接口Com中常量M同名的变量M,因此实现类ImpCom中同时存在两个变量M,这个新的变量M会隐藏接口中继承的常量M,但是不能通过super来访问。
b. 运行Test类后,输出结果为: 20 200
实现类ImpCom中的方法f中返回的是变量M+10,而ImpCom中的变量M的值为10,因此f方法返回值为20。接口Com中的常量M值为200,因此输出结果为20 200。
c. 在实现类中对接口中的常量访问可以用super.M或者Com.M
实现类中可以通过接口名或者super关键字来访问接口中的常量,即Com.M或者super.M。
d. 实现类ImpCom中重写f方法,访问控制可以为public 或者友元
接口中的方法默认为public,因此实现类ImpCom中重写的方法f访问控制只能为public。而Java中没有C++中的友元概念,因此选项d不正确。
阅读全文