有人可以解释一下子类对象无法持有超类构造函数的原因是什么?

class Alpha
{
   String getType1()
   {
      return "alpha";
    }
}

class Beta extends Alpha
{
   String getType1()
   {
      return "beta";
   }
   String acc()
   {
      return "acc";
   }
}

public static void main(String[] args)
{
   Alpha a1=new Beta();
   System.out.println(a1.getType1());
 }


这里的输出是“ beta”;但是对象a1没有对acc()的可见性?

最佳答案

这里不足为奇:

System.out.println(a1.getType1());


您正在调用超类中定义的方法。并在子类中覆盖。您创建子类的实例;而执行的方法是覆盖版本。

Beta包含另一种根本没有在您的示例中使用的方法的事实在这里根本没有发挥作用。即使getType1()将调用acc()-仍然可以工作。这就是polymorphism的本质!

准确地说:您的类中没有一个方法是constructor

07-24 09:16