当前页面: 开发资料首页 → J2SE 专题 → 这段代码编译能通过么??
这段代码编译能通过么??
摘要: 这段代码编译能通过么??
interface Beta{}
class Alpha implements Beta
{
String testIt()
{
return -#34;Tested-#34;;
}
}
public class Test
{
static Beta getIt()
{
return new Alpha();
}
public static void main(String []args)
{
Beta b = getIt();
System.out.println(b.testIt());
}
}
放进去试试就知道了....
当然不能,你的Test中还有静态方法,所以就要求Test是静态类。
编译提示的是找不到b.testIt()方法
按imA(男的不会,会的不男) 的说法 在Test类前加了个static
多了一行错误 提示 modifier static not allowed here 那静态类怎么定义....
我觉得是动态绑定的问题,b.testIt()调用的应该是父类(这里就是指接口Beta了)的testIt()方法,但是接口Beta中没有这个方法 所以报错了
不知道是不是这样
晕,看错了。
就是你说的原因,你的Beta接口没有定义testIt方法。虽然你实例化的是Alpha类,但是你定义的
类型是Beta,所以当然按照Beta的规则来定义。
当然不能,你的Test中还有静态方法,所以就要求Test是静态类。
至于这句话我说错了。
没有这个要求,我把static和abstract给记混了。
是还有抽象方法的类必须是抽象类。
不好意思,没走脑子
顺便帮我把这个版面的另个题看下 40分全给你了 呵呵
当然报错
Beta接口里面根本没有testIt()
在Beta接口加上 String testIt(){} 就可以了
接口中的方法能有body么????
很多地方怕面对的问题........
我觉得要想通过编译要这样写:
interface Beta
{
String testIt();
}
class Alpha implements Beta
{
String testIt()
{
return -#34;Tested-#34;;
}
}
public class Test
{
static Beta getIt()
{
return new Alpha();
}
public static void main(String []args)
{
Beta b = getIt();
System.out.println(b.testIt());
}
}
这样通过b就可以调用子类中的testIt()方法了,因为重写了也就是实现了接口中的
testIt()方法,是这样吧......
是我写错了 不好意思