我们可以使用多态性将抽象 Class 对象作为参数传递吗?

Can we Pass Abstract Class Object as Argument Using Polymorphism?

我有一个名为 'A' 的 class。 A 是一个抽象 class。并且 class 'B' 扩展了 class 'A'。

我还有一个 class 'C'。在 class 'C' 中有一个名为 show() 的函数。

I want to pass an object of class 'A' which is abstract. Is it possible?

或者

Can we do this using Polymorphism.

如果是!那怎么办?

I want to pass an object of class 'A' which is abstract. Is it possible?

是的,是的。以下是有效的:

abstract class A {}

class B extends A {}

class C {
    public void show(A a) {}
}

即使 A 是抽象的,您也可以接收类型 A 的参数(在这种情况下,将是类型 B 的对象)。

您不能真正传递 class A 的对象,因为 A 是抽象的,无法实例化。

Can we do this using Polymorphism.

上面的例子实际上已经使用了多态(subtyping)。

https://en.wikipedia.org/wiki/Polymorphism_(computer_science)#Subtyping

和上面的答案差不多,只是用代码详细说明了。天真的告诉方式,你不能在新运算符旁边有抽象的 class 名称,除非是数组,如 A a[] = new A[10]; 中你仍然为数组中的每个元素分配具体 class 的对象.

abstract class A{
        abstract void tell();
}

class B extends A{
        void tell(){
                System.out.println("I am B Telling");
        }
}

public class Test{

        public static void whoTold(A a)
        {
                a.tell();
        }

        public static void main(String[] args){
                B b = new B();
                whoTold(b);
       }
}