如果有人能帮助我理解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();
}
}
答案 0 :(得分:2)
你是对的。 WavPanel
is a JPanel
。但普通的JPanel
中没有任何组件。这就是您扩展它的原因,以便您可以添加一些特定于WavPanel
的行为
答案 1 :(得分:0)
是的,当您扩展时意味着您接受该类,并且能够为其添加更多属性。此外,所有对象的超类都是Object。
答案 2 :(得分:0)
您似乎直接从其定义中很好地理解了继承。事实上,类的子类具有其超类的所有方法和数据成员。但是,它们并不相同,因为子类具有更多特定的功能和数据成员,可以完成超类的更具体的任务。 (只是改写你所说的所有类的概括。)
虽然你似乎觉得你在一个随意的水平上不理解它。有很多在线资源可以通过示例进行教学,例如:
答案 3 :(得分:0)
这也意味着你可以分配
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类。
答案 4 :(得分:0)
继承概念通常用作向现有类添加新属性或操作的方法,但最重要的特性是真正的多态,如Andreas所解释的。很多GOF design pattern(例如T * emplate Method *, State , Strategy ...)都基于多态性。
要继续,继承不仅适用于结构扩展,还适用于动态行为实现。例如,从上面提供的链接中查看策略设计模式。尽管样本都在C#中,但最重要的是理解这一理念。如果您想了解有关面向对象原则的更多信息,您应该查看一般责任分配软件原则(或模式),缩写为 GRASP 。