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
的扩展。例如,以一个类
动物
,一个类
狗扩展了动物
<代码>狗仍然是一种
动物
。你的情况也是如此。

当你像那样使用
扩展时,你是说class
B
“是class
a
,只是它的一个更专门的版本。例如,您可能有
形状
,然后
圆扩展形状
<代码>圆是一种特殊的形状。这就是为什么它被称为子类化:您正在创建一个更具体的类,它(通常)是一般类的子集


“是”可能是继承中最基本的关系。

这是多态性的概念,是面向对象编程的关键部分。B的实例从A扩展而来,因此可以被多态地视为A的实例

注:反之亦然,即不能将A的实例视为B的实例

如果Cat是动物的亚型,则可以在任何可能的情况下使用Cat型表达式

您的
B是扩展A
。因此,
B
也具有
A


您期望的是a..因此您通过接收具有
a
属性的
B
感到满意。D中的
方法可以接受子类a的任何类


注意类型安全。目前,在D中的
方法中,对参数调用的所有方法都将执行A的实现。

类D中的方法()可以接受A类型的对象或A的子类型。在这种情况下,B扩展了A,因此它可以完美地工作。查看

类的子级可以通过其父级名称引用。这和有些人在名字中使用父亲的名字是一样的。保持简单:)