JFrame a = new MyJFrame();谁能帮忙解释一下?前面的JFrame和后面的MyJFrame是什么关系?这样写有什么好处吗?

解决方案 »

  1.   

    就你这句话来看,MyJFrame类是继承啦JFrame类。这样做的好处是MyJFrame除了有JFrame所有的特性外,还能有自己的特性。而且同时,你任然可以把MyJFrame当做一个普通的JFrame来使用。更多的好处自己查一下继承和多态了解一下把。
      

  2.   

    前面的JFrame是MyJFrame的父类。MyJFrame可以override父类的方法,MyJFrame类使用JFrame所规定好的方法,但可以有和父类不同的实现,以滿足特点的要求
      

  3.   

    就是一多态的概念,父类引用指向子类对象。JFrame是父类型,MyFrame是JFrame的一个子类。类似于“水果 aa = new 苹果()”。应该是MyFrame这个类修改了一些JFrame的方法,为了便于使用,以及接口的统一,统称为JFrame类型,但是应用中已经可以运行MyFrame中覆盖的方法了,而不是JFrame中的方法。但是如果MyFrame中写入了新的方法,实例a将无法调用。请LZ参考一下多态,方法覆盖的概念。
      

  4.   

    一句话:父类的引用指向子类的对象,多态,这样做对象应用a既可以继承JFrame中的方法,又可以使用子类MyFrame中的方法了
      

  5.   

    MyJFrame 类应该了继承了JFrame,JFrame a = new MyJFrame();这样是向上转型
      

  6.   

    多态的概念,向上转型,也就是父类的引用指向子类的对象,这样做对象应用a既可以继承JFrame中的方法,又可以使用子类MyFrame中的方法!!!!!
      

  7.   

    类似于这样的关系:List list = new ArrayList();
      

  8.   

    刚注册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!!
      

  9.   

    这是多态啦!在向象对象思想中,父类是更加“泛”的类型,而子类是比父类更加精确的类型其实很好理解的。借用楼上一位仁兄的模型:class 动物 class 鸟 extends 动物
    class 狗 extends 动物class 鸡 extends 鸟
    class 麻雀 extends 鸟
    如果有一个对象是“麻雀”,那么它当然也是一只“鸟”,也是一只“动物”,所以子类向父类转型是自动的
    如果有一个对象是一只“鸟”,那么它有可能是一只“鸡”,也可能是一只“麻雀”,所以父类对象在向子类类型转换时要作判断,并且进行强制转换:
    Bird bird = getBirder();
    if(bird instanceof Hen){
        Hen hen = (Hen)bird;
    }
    另外,有些类型是不能相互进行转换的,比如“鸡”的对象就不能转换成“狗”。楼主的引二个问题,这样做有什么好处。
    这样做可以使程序中只关心对象的“泛”类型,而不用关心它更加精确的类型。
    比如说一个人饿了的时候,他可以吃“面条”,也可以吃“米饭”,也可以吃“玉米”,还可以吃“土豆”。它们都是“粮食”的子类。因此,解决饿肚子问题时,我们只需要关心这个人是不是有“粮食”吃,而不是去想更精确的类型。