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

dxhxiaotian411 2006-09-11 09:52:11
为什么有些抽象类可以通过其它类的方法得到它的对象,然后再调用这个抽象类里面的方法,比如:
Graphics 类
Graphics g ;
g = 窗体.getGraphics() ;
g.drawImage() ;
有人能替我解释一下吗?
...全文
319 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
gseah 2006-09-11
  • 打赏
  • 举报
回复
上楼讲的很清楚。
shenglfyu 2006-09-11
  • 打赏
  • 举报
回复
自己写了个例子,希望可以对楼主有点帮助
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的子类都可以,在调用方法的时候,根据程序的多态就可以调用子类中相应的实现方法了。这种情况在接口也很多见。
总之,不论是接口,还是抽象类,它们本身是不可能有对象的,方法中返回的只不过是实现了这个接口,或者继承了这个抽象类的实体类的一个对象。

woowindice 2006-09-11
  • 打赏
  • 举报
回复
窗体.getGraphics() 是得到一个Graphics 类的实现
fishyqd 2006-09-11
  • 打赏
  • 举报
回复
这是多态的性质
guileen 2006-09-11
  • 打赏
  • 举报
回复
窗体.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();//这么说你明白了吗?

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧