Java继承
我有一个甲级Java继承,java,jakarta-ee,Java,Jakarta Ee,我有一个甲级 public class A{ public void doWork(){ .............. ............. } } 现在,公共类B扩展了 public class B extends A{ @override public void doWork(){ ............ ............ } } 现在,公
public class A{
public void doWork(){
..............
.............
}
}
现在,公共类B扩展了
public class B extends A{
@override
public void doWork(){
............
............
}
}
现在,公共类C在其中创建一个B对象,并将其传递给类D的方法
import xxx.xxx.B;
import xxx.xxx.D;
public class C{
B b= new B();
D d = new D();
d.method(b);
}
现在,类D将a类型的参数引入其方法并对其进行操作
public class D{
public void method(A a){
..........
..........
}
}
实际上是允许的,但我不明白为什么允许?
类D中的方法()应采用类型A的对象。
请帮帮我?
B
是A
的扩展。例如,以一个类动物
,一个类狗扩展了动物
<代码>狗仍然是一种动物
。你的情况也是如此。当你像那样使用扩展时,你是说classB
“是classa
,只是它的一个更专门的版本。例如,您可能有形状
,然后圆扩展形状
<代码>圆是一种特殊的形状。这就是为什么它被称为子类化:您正在创建一个更具体的类,它(通常)是一般类的子集
“是”可能是继承中最基本的关系。这是多态性的概念,是面向对象编程的关键部分。B的实例从A扩展而来,因此可以被多态地视为A的实例
注:反之亦然,即不能将A的实例视为B的实例
如果Cat是动物的亚型,则可以在任何可能的情况下使用Cat型表达式
您的B是扩展A
。因此,B
也具有A
您期望的是a..因此您通过接收具有a
属性的B
感到满意。D中的方法可以接受子类a的任何类
注意类型安全。目前,在D中的方法中,对参数调用的所有方法都将执行A的实现。类D中的方法()可以接受A类型的对象或A的子类型。在这种情况下,B扩展了A,因此它可以完美地工作。查看类的子级可以通过其父级名称引用。这和有些人在名字中使用父亲的名字是一样的。保持简单:)