JFrame a = new MyJFrame();谁能帮忙解释一下?

buaadu 2009-06-03 10:32:29
JFrame a = new MyJFrame();谁能帮忙解释一下?前面的JFrame和后面的MyJFrame是什么关系?这样写有什么好处吗?
...全文
448 17 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
weiluo12 2009-06-03
  • 打赏
  • 举报
回复
多态的一种变现:父类的引用指向子类的对象
所谓多态:就是父类或者接口类型的引用可以指向子类或者实现此接口的类的对象(实例)
猿敲月下码 2009-06-03
  • 打赏
  • 举报
回复
类似于这样的关系:
List list = new ArrayList();
luffyke 2009-06-03
  • 打赏
  • 举报
回复
多态的概念,向上转型,也就是父类的引用指向子类的对象,这样做对象应用a既可以继承JFrame中的方法,又可以使用子类MyFrame中的方法!!!!!
lbee286 2009-06-03
  • 打赏
  • 举报
回复
继承关系
tiancuiwusky 2009-06-03
  • 打赏
  • 举报
回复
多态
kaisa316 2009-06-03
  • 打赏
  • 举报
回复
MyJFrame 类应该了继承了JFrame,JFrame a = new MyJFrame();这样是向上转型
sunwei0325 2009-06-03
  • 打赏
  • 举报
回复
向上转型
ilrxx 2009-06-03
  • 打赏
  • 举报
回复
一句话:父类的引用指向子类的对象,多态,这样做对象应用a既可以继承JFrame中的方法,又可以使用子类MyFrame中的方法了
sisigosong 2009-06-03
  • 打赏
  • 举报
回复
就是一多态的概念,父类引用指向子类对象。JFrame是父类型,MyFrame是JFrame的一个子类。类似于“水果 aa = new 苹果()”。应该是MyFrame这个类修改了一些JFrame的方法,为了便于使用,以及接口的统一,统称为JFrame类型,但是应用中已经可以运行MyFrame中覆盖的方法了,而不是JFrame中的方法。但是如果MyFrame中写入了新的方法,实例a将无法调用。请LZ参考一下多态,方法覆盖的概念。
cgaolei 2009-06-03
  • 打赏
  • 举报
回复
前面的JFrame是MyJFrame的父类。

MyJFrame可以override父类的方法,MyJFrame类使用JFrame所规定好的方法,但可以有和父类不同的实现,以滿足特点的要求
jlwei888 2009-06-03
  • 打赏
  • 举报
回复
继承关系!

对象的基本概念啊!多看看书吧!
calibure 2009-06-03
  • 打赏
  • 举报
回复
就你这句话来看,MyJFrame类是继承啦JFrame类。这样做的好处是MyJFrame除了有JFrame所有的特性外,还能有自己的特性。而且同时,你任然可以把MyJFrame当做一个普通的JFrame来使用。

更多的好处自己查一下继承和多态了解一下把。
小灰狼 2009-06-03
  • 打赏
  • 举报
回复
这是多态啦!

在向象对象思想中,父类是更加“泛”的类型,而子类是比父类更加精确的类型

其实很好理解的。借用楼上一位仁兄的模型:

class 动物

class 鸟 extends 动物
class 狗 extends 动物

class 鸡 extends 鸟
class 麻雀 extends 鸟


如果有一个对象是“麻雀”,那么它当然也是一只“鸟”,也是一只“动物”,所以子类向父类转型是自动的
如果有一个对象是一只“鸟”,那么它有可能是一只“鸡”,也可能是一只“麻雀”,所以父类对象在向子类类型转换时要作判断,并且进行强制转换:
Bird bird = getBirder();
if(bird instanceof Hen){
Hen hen = (Hen)bird;
}
另外,有些类型是不能相互进行转换的,比如“鸡”的对象就不能转换成“狗”。





楼主的引二个问题,这样做有什么好处。
这样做可以使程序中只关心对象的“泛”类型,而不用关心它更加精确的类型。
比如说一个人饿了的时候,他可以吃“面条”,也可以吃“米饭”,也可以吃“玉米”,还可以吃“土豆”。它们都是“粮食”的子类。因此,解决饿肚子问题时,我们只需要关心这个人是不是有“粮食”吃,而不是去想更精确的类型。

zhufenghappy 2009-06-03
  • 打赏
  • 举报
回复
学习了
xuchaoyou 2009-06-03
  • 打赏
  • 举报
回复
刚注册csdn,就看到了楼主这个问题。
JFrame a = new MyJFrame();是一中多态;我给你举个例子:

public class Test
{
public static void main(String[] args)
{
Animal bird = new Bird(); //这儿就是你说的问题;
Animal dog = new Dog();//同上!
bird.run();
dog.run();
}
}

abstract class Animal
{
public void run(){}
}

class Bird extends Animal
{
public void run()
{
System.out.println("Bird Fly!!");
}
}

class Dog extends Animal
{
public void run()
{
System.out.println("Dog Run!!");
}
}

Animal父类中的方法run()没有主体。bird.run();就好比通过父类的run();访问到Bird中的run();这样些有一个节省代码的好处:假如我定义一个方法void animalRun(Animal a){a.run();}方法,每次传入的都是Animal子类的实例,这样就可以访问子类的run();方法了。如果不这样用的话,那么每出现一新的动物,就要写一个方法比如void animalRun(Bird a){a.run();}和void animalRun(Dog a){a.run();}是不是很麻烦啊。

不知楼主理解了没有,加油!!一起学习!!祝你早日学好java!!
xiaomiao13 2009-06-03
  • 打赏
  • 举报
回复
面向接口编程
这个是抽象类,一样的道理。
haizhuyoujie 2009-06-03
  • 打赏
  • 举报
回复
向上转型!!!!

62,635

社区成员

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

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