为什么有些抽象类可以通过其它类的方法得到它的对象,然后再调用这个抽象类里面的方法,比如:
Graphics 类
Graphics g ;
g = 窗体.getGraphics() ;
g.drawImage() ;
有人能替我解释一下吗?

解决方案 »

  1.   

    窗体.getGraphics() 是得到一个Graphics 类的实现
      

  2.   

    自己写了个例子,希望可以对楼主有点帮助
    abstract class A{
      public void get();
      public void set();
    }
    class B extends A{
      public void get(){
      //自己的实现;
     }
      public void set(){
      //自己的实现;
     }
    }
    class C exntends A{
      public void get(){
      //自己的实现;
     }
      public void set(){
      //自己的实现;
     }
    }
    class d {
     public static A getObj(){
        return new c();
     }
    }
    A obj=d.getObj();
    obj.get();       //调用的是Class c 的get()方法现在我们来看下class d中的getObj返回类型,它可以返回A,也可以返回C,显然返回A更加能用一点,因为这样一来,它可以返回的对象更加广泛,比如可以把new C(),改成new B(),以及其它任何继承了A的子类都可以,在调用方法的时候,根据程序的多态就可以调用子类中相应的实现方法了。这种情况在接口也很多见。
    总之,不论是接口,还是抽象类,它们本身是不可能有对象的,方法中返回的只不过是实现了这个接口,或者继承了这个抽象类的实体类的一个对象。
      

  3.   

    窗体.getGraphics()返回的不再是一个Abstract Graphics a,而是一个extended Graphics b,b同时也是Abstract Graphics,所以b可以以a的形式返回
    不仅 abstract class,可以如此,interface 也可以如此
    public abstract class Abs{...}
    public class Ext extend Abs{...}
    ...
    Abs a= new Ext();//这么说你明白了吗?