如果方法是抽象的,那么是必要的吗?

时间:2014-04-21 21:03:37

标签: java inheritance compiler-errors polymorphism downcast

以下是一个例子:

public abstract class Solid{

//code...//

public abstract double volume();
}

这是一个扩展Solid

的类
public class Sphere extends Solid{

//code...//

public double volume(){
//implementation//
}
}

现在,如果我想做这样的事情,我是否需要垂头丧气?

public class SolidMain{

public static void main(String[] args){
Solid sol = new Sphere(//correct parameters...//);
System.out.println(sol.volume());
}

我知道编译器无法找到正确的方法时会发生编译时错误。由于对象Sol属于Solid类型,只有abstract volume();方法,编译器会导致错误吗?我是否必须将Sol转发给Sphere对象才能使用volume()方法?

2 个答案:

答案 0 :(得分:0)

  

我是否必须将Sol向下转换为Sphere对象才能使用volume()方法?

不,Solid引用可以正常工作,因为在那里声明了volume()方法。

答案 1 :(得分:0)

System.out.println(sol.volume());

调用Sphere的volume(),sol只是一个对象的引用变量(在这种情况下是Sphere),你不需要将它强制转换。