本帖最后由 woshilitao5 于 2011-01-19 12:31:52 编辑

解决方案 »

  1.   

    看了一下,抽象类无非就是提供一个标准,当它的子类去继承它的时候就必须遵循它的标准,因为抽象类的抽象方法必须得在它的子类中实现;如果你的B和C继承了A,却没有实现抽象方法doSomething()方法,程序是会报错的!
      

  2.   

    测试方法中所有的实例都可以看作是A类型的,除非需要执行子类特有的方法否则都应该写成:  
             A b = new B();
             A c = new C();
    因为他们都继承了A,又因为子类中重写了父类的doSomething方法,所以无论父类的doSomething方法是抽象还是非抽象方法,在运行时执行的是子类的方法。
    如果把A看做人类,B看作男人,C看作女人,public static void doSomething(A a) 就看作是个可以进入做事情的地方,为什么A和B都能进入了?理解这个就好比是男人女人都是人,允许人类进入的地方,男女都可以进入,如果注明女人或者男人可以进的地方,那只有女人或者男人才可以进入了。男人和女人都要做事情就有了个共同的行为叫doSomething,但是具体男和女做的事情可能又不一样,这样B和C各自可以重新赋予了doSomething不同的执行结果,就产生了多态。何时用抽象合适用具体类,这可不是一二句话说的清楚的,你要真正理解面向对象才能做出判断。
      

  3.   

    学习面向对象,一定要搞懂抽象。
    面向对象最接近我们人类的思维,你的抽象能力就是你对万物万事总结和归纳的能力。
    关于抽象可以脱离任何语言来解释。
    举个简单的例子,猫老虎豹可以抽象成猫科
    猫科,犬科可以抽象成动物
    动物植物可以抽象成生物
    生物非生物可以抽象成物体
    就这样向上追溯所有的事物都可以归根到一类如果不用ABC用下面的这种写法你是否会有些启发呢
    你知道动物会发声,但是没有具体的动物你就不知道它发什么声。
    所以你把发声在动物的类里抽象成一个方法,而具体动物要有具体的发声。
    不知道你明白了没有。
    abstract class Animal {
        public abstract void say();
    }class Cat extends Animal {
        public void say() {
            System.out.println("喵喵...");
        }
    }class Dog extends Animal {
        public void say() {
            System.out.println("汪汪...");
        }
    }
      

  4.   

    抽象类就是 like a  说明像什么
    有abstract的方法的类,必须是abstract类,abstract类里的方法一定要在实现类里实现;概念性的东西
    看多了,用多了就好理解了
      

  5.   

    另一本书上看到:抽象是指只关注对象的重要细节,而忽略对象的次要细节。
    这句话应该可以概括java中抽象的含义啦。另外:
    抽象包含2个方面:过程抽象 和 数据抽象。
    抽象的概念在应用于类的属性(数据)和方法时称为数据抽象。抽象的优点:
    1.将重点放在问题上
    2.确定本质特性和所需的操作
    3.有助于回避问题的次要细节大家觉得我从书上总结的这些正确的话,请回帖,然后我就可以结贴啦!谢谢大家!
      

  6.   

    据说Java对抽象类好像支持得不是很好