【发布时间】:2011-12-23 00:26:06
【问题描述】:
我们看下面的Java简单代码sn-p。
interface Sum
{
abstract public void showSum();
}
interface Mul
{
abstract public void showMul();
}
abstract class Super implements Sum
{
protected int x;
protected int y;
public Super(int x, int y)
{
this.x=x;
this.y=y;
}
//No error, though the method showSum() of the implementing iterface Sum is commented. Why?
/*public void showSum()
{
System.out.println("Sum = "+(x+y));
}*/
}
final class Calculation extends Super implements Mul
{
public Calculation(int x, int y)
{
super(x,y);
}
public void showSum()
{
System.out.println("Summation = "+(x+y));
}
//If showMul() is commented , it would issue a compile-time error. Why?
public void showMul()
{
System.out.println("Multiplication = "+(x*y));
}
}
final public class Main
{
public static void main(String[] args) throws IOException
{
Scanner s=new Scanner(System.in);
System.out.print("\nEnter a number : ");
int x=s.nextInt();
System.out.print("\nEnter another number : ");
int y=s.nextInt();
Calculation c=new Calculation(x,y);
c.showSum();
c.showMul();
}
}
由于接口 Sum 只包含一个方法 showSum(); 正在由抽象类 Super 实现,因此抽象类 Super 来实现该方法showSum();。然而,编译器根本没有抱怨,程序运行良好,完全没有问题。为什么?
同样,非抽象最终类 Calculation 正在实现 Mul 接口,并包含其实现接口中提供的方法showMul(); 的实际实现。如果在类 Calculation 中这个方法 showMul() 被注释,它会发出编译时错误。为什么同样的事情不适用于那个抽象类Super?
【问题讨论】:
标签: java