首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

抽象类回调?该怎么处理

2012-04-05 
抽象类回调?abstractclassGeometry{publicabstractdoubleComputerArea()}classLaderextendsGeometry{doub

抽象类回调?
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呢。
抽象类不是用来回调的,并不代表它在某些情况下不可以做类似回调的事情。

热点排行