多态遗传

时间:2016-02-23 06:04:45

标签: java

我有一个关于如何从子类或父类定义方法的问题。例如:

<TextField/>

儿童班是:

public class Thought
{
   //-----------------------------------------------------------------
   //  Prints a message.
   //-----------------------------------------------------------------
   public void message()
   {
      System.out.println ("I feel like I'm diagonally parked in a " +
                          "parallel universe.");

      System.out.println();
   }
}

如果我想从main方法调用方法消息,我是否必须使用public class Advice extends Thought { //----------------------------------------------------------------- // Prints a message. This method overrides the parent's version. //----------------------------------------------------------------- public void message() { System.out.println ("Warning: Dates in calendar are closer " + "than they appear."); System.out.println(); super.message(); // explicitly invokes the parent's version } } Thought.message,因为我使用了超级调用者。 super。(method)()在技术上只是将父方法复制并粘贴到子方法中,允许您只创建一个子对象吗?

3 个答案:

答案 0 :(得分:3)

这完全取决于您如何初始化对象。你可以使用两者。但是使用多态,你可以这样做:

Thought t = new Advice();
t.message();

没有多态性:

Advice a = new Advice();
a.message();

由于Advice继承了message()中的方法Thought并实际调用了对其超类的调用,因此将使用这两个示例调用这两个方法。

答案 1 :(得分:1)

我认为你需要回去学习一下OO ......

是的,你可以只为孩子创建一个对象,但它仍然是isA父母的实例。

super.method()调用超类方法。它不会将超类方法复制到子类中。

方法的超类实现可能使用私有变量,因为子类无权访问。

答案 2 :(得分:0)

Thought t1 = new Thought();
t1.message(); // invokes Thought#message()

Thought t2 = new Advice();
t2.message(); // invokes Advice#message()

Advice a1 = new Advice();
a1.message(); // invokes Advice#message()

Advice a1 = new Thought();  //COMPILATION ERROR

当您调用实例方法时,在运行时将执行引用中的任何对象。