【问题标题】:Inheritance concept java..help继承概念 java..help
【发布时间】:2010-12-23 22:32:48
【问题描述】:

如果有人能帮助我理解 Java 中的继承概念,我将不胜感激。 下面的代码就是一个例子吗?

我的意思是 WavPanel 类实际上是 JPanel 的子类,它充当超类。

对吗?

如果是这样,这意味着“JPanel 有什么,WavPanel 也有,但它更具体,因为通过它的方法你可以做到 别的东西”。

我错了吗?

谢谢。 最大

import javax.swing.JPanel;
class WavPanel extends JPanel {

        List<Byte> audioBytes;
        List<Line2D.Double> lines;

        public WavPanel() {
            super();
            setBackground(Color.black);
            resetWaveform();
        }

        public void resetWaveform() {
            audioBytes = new ArrayList<Byte>();
            lines = new ArrayList<Line2D.Double>();
            repaint();
        }
}

【问题讨论】:

    标签: java inheritance


    【解决方案1】:

    你是对的。 WavPanelis aJPanel。但是普通的JPanel 里面没有任何组件。这就是您扩展它的原因,以便您可以添加一些特定于 WavPanel 的行为

    【讨论】:

      【解决方案2】:

      是的,当您扩展时,这意味着您采用该类,并且能够为其添加更多属性。此外,所有对象的超类都是 Object。

      【讨论】:

        【解决方案3】:

        您似乎对继承的定义有相当好的理解。事实上,类的子类确实拥有其超类的所有方法和数据成员。但是,它们并不相同,因为子类具有比超类更具体的功能和数据成员来完成更具体的任务。 (只是将您所说的重新表述为所有类的概括。)

        虽然你似乎只是觉得你不理解它。有很多在线资源可以通过示例进行教学,例如:

        What's a good example for class inheritance?

        【讨论】:

          【解决方案4】:

          这也意味着你可以分配

          JPanel mypanel = new WavPanel();
          

          因为您使用自定义/更多功能扩展了 JPanel,为什么?因为 WavPanel 是 JPanel。但是,您不能调用在 WavPanel 类中实现的方法。

          这个概念叫做多态性。

          如果您有 3 个不同的类,它们都从一个名为 Animal 的超类继承方法/属性,该超类提供通用方法,例如“Run”、“Walk”、“Eat”等,您可以在 for 循环中处理不同的对象类型因为扩展这个“动物”类的动物是动物。

          Dog myDog = new Dog();
          Horse myHorse = new Horse();
          Cat myCat = new Cat();
          
          
          ArrayList<Animal> myAnimals = new ArrayList<Animal>();
          
          myAnimals.add(myDog);
          myAnimals.add(myHorse);
          myAnimals.add(myCat);
          
          for (Animal animal : myAnimals) {
              animal.run();
          } 
          

          这个例子假设你已经创建了一个 Animal 类。

          【讨论】:

            【解决方案5】:

            继承概念通常用作向现有类添加新属性或操作的一种方式,但最重要的特性是真正的多态性,正如 Andreas 所解释的那样。许多GOF design pattern(例如T*emplate Method*、StateStrategy...)都是基于多态性的。

            再次重申,继承不仅用于结构扩展,还用于动态行为实现。例如,从我上面提供的链接中查看 Strategy 设计模式。尽管示例是用 C# 编写的,但最重要的是理解其中的原理。如果您想了解更多有关面向对象原则的信息,您应该查看一般责任分配软件原则(或模式),缩写为 GRASP

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2013-01-27
              • 2018-07-07
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多