如题!

解决方案 »

  1.   

    http://blog.sina.com.cn/s/blog_60f0ec5c0100ey99.html
      

  2.   

    抽象类和抽象方法的产生在Thinking in Java里面阐述的非常清楚了,正如那个Instrument的例子,Instrument类的对象没有任何意思,它是抽象的,定义在它里面的play()方法也是没有意思的,之所以定义这个方法,是为了在它的继承类中,可以用不同的方法类表示这个接口,产生不同的行为。为了防止客户端调用了这个方法,也不会产生编译错误,但是执行的结果不是客户端所希望的,那么怎样使得这样的调用在编译的时候就能发现问题,从而防止这种问题出现呢?解决的方法就是“抽象方法机制”。在方法前面加abstract关键词:
                                          abstract void f();
    这个方法是不完整的,仅有申明没有方法体。那么就变成了抽象类,如果一个类包含一个或多个抽象方法,那么此类就必须限定为abstract的,否则编译器会报错。由于抽象类的不完整(抽象方法的不完整造成的)就不能产生该类的对象,编译器就会产生报错。abstract class Instrument{
     public abstract void play();
    }class Wind extends Instrument{
      public void play(){
       System.out.println("Hello Wind!");
      }
    }public class Music{
     public static void tune(Instrument i){
      i.play();
     }
     
     public static void main(String[] args){
      Wind w = new Wind();
      tune(w);
     } 
    }上面的输出结果为:
    Hello Wind!如果将Instrument的class前面abstract除掉就会产生编译错误:
    Instrument 不是抽象的,并且未覆盖 Instrument 中的抽象方法 play()当Music类中生成Instrument类时,看看编译能不能通过:public class Music{
     public static void tune(Instrument i){
      i.play();
     }
     
     public static void main(String[] args){
      Wind w = new Wind();
      tune(w);
     } 
    }结果编译报错:
    Instrument 是抽象的;无法对其进行实例化纵上可以得到,所谓“抽象”的引入是为了防止我们产生错误(或者说正确设计合适的类,没有实际意思的类可以将其“抽象”),而且为继承类提供统一接口。
      

  3.   

    http://topic.csdn.net/u/20071129/22/e8031297-419b-4148-bc54-64d8bc04f420.html
      

  4.   

    可以这么看,确定了某种类型一定会有一个方法,但是这个方法具体做些什么事还不知道,必须要细化到子类类型时才知道比如有个“员工”类,这个类型一定会有一个 doWork 方法,就是工作。但是一个“员工”的“工作”应该如何展开,需要到子类时才可以确定比如有子类“清洁工”,它的工作就是“打扫”
    子类“会计”的工作就是“算账”
    子类“程序员”的工作就是“编写程序”这时“员工”类就应该做成抽象类,它的 doWork 方法是抽象的
      

  5.   

    讲的很形象,我再做点补充,是我自己的经验之谈。
    我开始学Java的时候,是看马士兵的视频,然后自己开始跟着写个坦克大战,写完后受益匪浅,然后我开始进行游戏的继续开发,我想做一个物品系统,比如吃到加血的物品,吃到无敌的物品等等,这时,抽象类就有用了。
    首先,定义一个物品类,物品有一个使用效果的方法,可是不同物品的效果不一样啊,所以定义为抽象方法,以后每个具体的物品都继承它,写具体的实现方法就好了。到这,楼上的内容结束了
    你可能会说,大不了我每个物品里都单独写个实现方法就好了啊。
    这种方法是可以,但是,还有点要注意,比如,所有的物品都需要和坦克碰撞才会触发使用效果,那么,每个物品都要有个碰撞方法,而且都是一样的内容,如果每次都单独写到具体的物品类中,那就太冗余了。所以我把碰撞方法写成抽象类中的一个非抽象方法里,那么,以后每个具体物品继承后,就直接拥有碰撞方法了,而不用重复的写了。这样,一个抽象类,既解决了一定会出现的不确定的方法,也解决了必要的方法。这应该就是抽象类最大的优势了。
    我的Java经验只有2年,这是我的理解,有不对的地方,还望大牛们指正。
      

  6.   

    抽象类在Java语言中表示的是一种继承关系,一个类只能使用一次继承关系
      

  7.   

    you are right本来你的这个意思我想表达的,但是好象已经超出楼主所提的范围,并且刚好有点事
    在我的例子中,你可以这么认为:老板一个一个地请员工到他的办公室谈话,谈完之后老当然要让员工回去继续工作。这时,在老板的眼里,所有的员工都是一个类型,那就是基类“员工”,在他看来,只要是他的员工,就可以调用 doWork() 方法,这件事不必关心员工的具体类型。