这两个东西,一直都很迷惑人,abstract class,
1,通过创建子类对象可以生成一个抽象类引用
2,通过一个生成实例的方法,如:getIstance()方法,
Graphics,它似乎不用创建实例对象,而方法也不是static的,居然直接就调用了?不明白。
interface创建实例对象似乎也是不明白怎么搞的,
哪位大虾解释一下。

解决方案 »

  1.   

    抽象类 有自己的方法 方法可以被实现。
    但是抽象类不能被直接实例化(不能之间创建对象。)
        必须通过继承才能实现。(JAVA单一继承)
    接口,也有自己的方法,但是方法没有实现的内容。通过接口,
    在新类中重新写方法的实现方法,,同时接口实现了多重继承的问题。
      

  2.   

    这两个东西,一直都很迷惑人,abstract class,
    1,通过创建子类对象可以生成一个抽象类引用  --只是向上转型而已
    2,通过一个生成实例的方法,如:getIstance()方法,--factory模式
    interface创建实例对象似乎也是不明白怎么搞的,-- interface一般只作型别即使是类似于List list = new XXXList();也只是面向接口编程中的,向上转型而已
      

  3.   

    抽象类和接口不能生成实例,但是你可以把实现他们的类的实例声明为这个抽象类型,比方说,你声明一个动物接口,可以以一个"猫"赋值给它,这样很好理解.
    getInstance一般是单例模式,或者工厂模式里用到,你可以去查看相关模式的资料就明白了,单例里的话肯定是static的,工厂模式里,则有可能是一个工厂类的实例的非静态方法
      

  4.   

    抽象类和接口不能实例化。但是它们的引用能指向一个实例化对象。被指向的实例化对象一定是实现了那个接口或者抽象类。只不过你在表面看不出来。你去看看"JAVA_HOME"/scr.zip.里面有getIstance()的原码。看了就明白了!
      

  5.   

    比如说啊,Container cp=frame.getContentPane();
    这个里面啊,Container类是抽象类,后来我们要用cp的话,似乎是直接用的,比如cp.add()。这里的cp它是个引用,但是它指向的到底是个什么对象呢,还是个子类对象(向下转型)?谁能解释一下?
      

  6.   

    cp 这里是个引用.但是frame.getContentPane().这个函数返回的是一个实现了Container 的对象,也就是说调用这个函数时,有一个类实现了Container抽象类。然后生成一个对象。并返回, 具体你可以通过System.out.println(cp);看到这个对象。具体frame.getContentPane()怎么实现的。你可以看frame.getContentPane()的实现原码。
      

  7.   

    即使是类似于List list = new ArrayList();list.add(new Integer(5));
    也只是面向接口编程中的,向上转型而已。
    可否将这句话讲明白点,为什么接口创建的引用。用法一样呢?
    假如上面换成:ArrayList list = new ArrayList();list.add(new Integer(5));
    有何不同?
      

  8.   

    to 楼上:
    面向接口编程的好处是,在对具体实现做了更改以后,接口保持不变,这样,便于使用和维护。比如,List list = new ArrayList();
    强迫你只能使用List接口中的方法,这样,以后如果你想用其它List,比如LinkedList,那么你只需要把这一句改成List list = new LinkedList(); 而程序的其于部分均可保持不变。因为你只用了List接口中的方法。
      

  9.   

    接口赋值后可以使用,并不是代表把它实例化了,接口和抽象类都不可以实例化,楼主要搞清出什么是实例化,只有被new才叫实例化,当然有时候getIstance()也可以,但是你看它的实现代码,最终还是new来实例化。赋值然后使用只不过是多态调用。至于搂住说的Graphics,我理解是系统负责创建的,比较特殊。
      

  10.   

    首先非常感谢大家给的这些答案,感觉比看书受用多了,我去试了下,
    就说:List list =  new ArrayList();然后list这个引用在eclipse下的方法就只有List里的方法,而ArrayList中的方法则没有,面向接口确实是很好的。子类和父类(抽象类)似乎也可以,当然我不是要问抽象类和接口的区别,刚才主要是想说,这个里面的实例化是怎么搞的,现在也搞清楚了,最后谢谢大家。