抽象类回调?
abstract class Geometry
{
public abstract double ComputerArea();
}
class Lader extends Geometry
{
double a,b,h;
Lader(double a,double b,double h)
{
this.a=a;this.b=b;this.h=h;
}
public double ComputerArea()
{
return((1/2.0)*(a+b)*h);
}
}
class Circle extends Geometry
{
double r;
Circle(double r)
{
this.r=r;
}
public double ComputerArea()
{
return(3.14*r*r);
}
}
class Cone
{
Geometry bottom;
double height;
Cone(Geometry bottom,double height)
{
this.bottom=bottom;
this.height=height;
}
void changBottom(Geometry bottom)
{
this.bottom=bottom;
}
public double ComputerVolume()
{
return (bottom.ComputerArea()*height)/3.0;
}
}
public class Example
{
public static void main(String args[])
{
Cone cone;
Geometry geometry;
geometry=new Lader(2.0,7.0,10.7);
System.out.println( "梯形的面积 "+geometry.ComputerArea()--?);
cone=new Cone(geometry,30);
System.out.println( "梯形底的锥的体积 "+cone.ComputerVolume());
geometry=new Circle(10);
System.out.println( "半径是10的圆的面积 "+geometry.ComputerArea()--?);
cone.changBottom(geometry);
System.out.println( "圆形底的锥的体积 "+cone.ComputerVolume());
}
}
想问一下,接口可以回调,但抽象类不允许回调,但以上这个例子不是一种回调吗?谢谢
[解决办法]
在这里LZ这样用肯定没问题。就好象打篮球的完全也可以踢足球一样。
准确的来讲,抽象类和接口是不能进行比较的。根本不是一个概念的东西。
抽象类是类层次,是从对象角度描述世界的。接口是方法层次,是从行为角度描述世界的。
抽象类的任务就是去配合其他类完整的构建对象模型。接口的任务则是在对象模型之上,构造一个行为链。
你举的这个例子,刚好回调的方法ComputerArea可以定义到抽象类中。如果我们现在要回调的是另一个行为,比如说我们要返回这个图形是什么人画的 person getDrawer()。这个时候你要是再把getDrawer这个方法放到抽象类中,虽然完成了抽象类回调的要求,但是破坏了对象模型。把一个不该放在抽象类中方法放进去了。
[解决办法]
public class Example
{
private Geometry callBack;
public void setCallBack(Geometry callBack){
this.callBack=callBack;
}
public void doSth() {
System.out.println(callBack.ComputerArea());
}
public static void main(String args[])
{
Lader lader=new Lader(2.0,7.0,10.7);
Example e = new Example();
e.setCallBack(lader);
e.doSth();
}
}
"抽象类不允许回调 ",楼猪是在什么地方看到的?官方的吗?
好象的确是继承限制了回调
[解决办法]
LZ,能不能和该不该,不是一会事。你算100*100,还可以用循环100次每次加100呢。
抽象类不是用来回调的,并不代表它在某些情况下不可以做类似回调的事情。