继承概念java..帮助

继承概念java..帮助,java,inheritance,Java,Inheritance,如果有人能帮助我理解Java中的继承概念,我将不胜感激。 下面的代码就是一个例子吗 我的意思是WavPanel类实际上是作为超类的JPanel的一个子类 对吗 如果是这样的话,这意味着“JPanel所拥有的,也可以是一个面板,但它更具体,因为通过它的方法,你可以做到 还有别的” 我错了吗 多谢各位。 马克斯 import javax.swing.JPanel; 类WavPanel扩展了JPanel{ 列出音频字节; 列出行; 公共事务委员会(){ 超级(); 挫折背景(颜色:黑色); 重置波形(

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

我的意思是WavPanel类实际上是作为超类的JPanel的一个子类

对吗

如果是这样的话,这意味着“JPanel所拥有的,也可以是一个面板,但它更具体,因为通过它的方法,你可以做到 还有别的”

我错了吗

多谢各位。 马克斯

import javax.swing.JPanel;
类WavPanel扩展了JPanel{
列出音频字节;
列出行;
公共事务委员会(){
超级();
挫折背景(颜色:黑色);
重置波形();
}
公共文件无效(){
audioBytes=新的ArrayList();
行=新的ArrayList();
重新油漆();
}
}

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

你说得对<代码>波形面板
JPanel
。但是一个普通的
JPanel
中不会有任何组件。这就是为什么要扩展它,以便可以添加一些特定于
WavPanel

的行为。从继承的定义来看,您似乎对继承有相当好的理解。事实上,类的子类具有其超类的所有方法和数据成员。但是,它们是不同的,因为子类有更具体的函数和数据成员,它们完成了超类无法完成的更具体的任务。(只是将你所说的话重新表述为对所有课程的概括。)

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


这也意味着您可以分配

JPanel mypanel = new WavPanel();
既然您使用自定义/更多功能扩展了JPanel,为什么?因为WavPanel是一个JPanel。但是,您不能调用在WavPanel类中实现的方法

这个概念称为多态性

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

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();
} 
Dog myDog=新狗();
马我的马=新马();
猫myCat=新猫();
ArrayList myAnimals=新的ArrayList();
添加(myDog);
添加(我的马);
添加(myCat);
用于(动物:我的动物){
动物。跑();
} 

本例假设您创建了一个Animal类。

继承概念通常用于向现有类添加新属性或操作,但最重要的特性是Andreas解释的真正多态性。很多(例如T*模板方法*、状态、策略…)都是基于多态性的

要继续,继承不仅适用于结构扩展,还适用于动态行为实现。例如,从我上面提供的链接中查看策略设计模式。尽管样本是C#,但最重要的是理解其原理。如果您想阅读更多关于面向对象原则的内容,您应该看看一般责任分配软件原则(或模式),缩写为GRAP

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();
}