感觉 Java 中的抽象类和 C++ 中的模板相似
但不知道抽象类有会用下面这个感觉用不用抽象类都一样/**如果把抽象类去掉也是正确的,那这个抽象类有什么用呢**/
abstract class Shape         //抽象类
{
abstract double area();   //抽象方法
}
class Circles extends Shape    //继承抽象类
{
double radius;
double area()         //实现抽象类的方法
{
return 3.14 * radius * radius;
}
}
class Rectangles extends Shape      //继承抽象类
{
double length;
double width;
public double area()        //实现抽象类的方法
{
return length * width;
}
}
class Ladders extends Shape     //继承抽象类
{
double length;
double width;
double height;
public double area()       //实现抽象类的方法
{
return (length + width) * height / 2;
}
}public class AbstractShapeDemo_4_22
{
public static void main(String[] args)
{
Circles c = new Circles();
c.radius = 2;
System.out.println(c.area()); Rectangles r = new Rectangles();
r.length = 4;
r.width = 3;
System.out.println(r.area()); Ladders l = new Ladders();
l.length = 4;
l.width = 3;
l.height = 2;
System.out.println(l.area());
}
}

解决方案 »

  1.   

    按照《Thinking in Java》的说法,抽象类是普通的类与接口之间的一种中庸之道。普通类提供的是一般意义的抽象(所有成员都有实现),而接口则提供完全的抽象(没有任何实现)。抽象类允许一部分方法提供实现。
    如果类中的某个方法的实现需要由子类实现,只需要声明为抽象方法即可(相当于C++中的纯虚函数)。这时类也随之变为抽象类,但它较接口的优势在于可以定义一些方法的实现。另外,抽象类的字段也可以被子类使用,而接口中的字段都是static和final的。
    以上为一点浅见。
      

  2.   

    jdk1.8中接口可以有默认实现:
    interface Queue {
            Message read();
            void delete(Message message);
            void deleteAll() default {
                    Message message;
                    while ((message = read()) != null) {
                            delete(message);
                    }
            }
    }
      

  3.   

    抽象类在多态机制中有用哦
    还有一些工具的情况可以用使抽象类
    楼主研究下设计模式,一些中间环节的类也可以写成抽象类,可起承上启下作用。你的这个例子可以从意义上理解,一个shape是一个抽象的事物,而Circles ,Rectangles 圆,三角型是具体的形状。具体形态要有具体的属性与方法,而抽象的事物只需抽象的方法,待具体事物去实现它就可。
      

  4.   

        楼主还不知道多态真正的用处在哪儿。而只是知道形状与三角形、圆形是继承的关系而进行继承的。    而抽象类还有个好处,是可以防止你对抽象类(Shape)实例化,即你不能new Shape(),因为这是没有意义的。    推荐看《headfirst设计模式》,我对多态的理解就是从这开始的。
      

  5.   

    承上启下,基本共性用借口实现,部分共性用用抽象类实现基本共性接口,最后的具体特性用在子类中体现,参照JDK的很多类,如InputStram类的结构就能看出来。