我有一个关于如何从子类或父类定义方法的问题。例如:
<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)()在技术上只是将父方法复制并粘贴到子方法中,允许您只创建一个子对象吗?
答案 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
当您调用实例方法时,在运行时将执行引用中的任何对象。