站内搜索: 请输入搜索关键词

当前页面: 开发资料首页J2SE 专题一个想不通的问题????

一个想不通的问题????

摘要: 一个想不通的问题????


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


这是多态的性质


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


自己写了个例子,希望可以对楼主有点帮助
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的子类都可以,在调用方法的时候,根据程序的多态就可以调用子类中相应的实现方法了。这种情况在接口也很多见。
总之,不论是接口,还是抽象类,它们本身是不可能有对象的,方法中返回的只不过是实现了这个接口,或者继承了这个抽象类的实体类的一个对象。




上楼讲的很清楚。


窗体.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();//这么说你明白了吗?



↑返回目录
前一篇: 静态字段的一个问题,请大家帮我分析个源码
后一篇: 请问 如何才能操作网页的document