一个对象声明的问题?(40分)

  • 主题发起人 主题发起人 NEDVED
  • 开始时间 开始时间
N

NEDVED

Unregistered / Unconfirmed
GUEST, unregistred user!
在看一本JAVA的书时有一个很令我困惑的问题,就是在创建一个帧时,当定义了一个继承类
后在main函数内声明初始化一个帧对象时为何要把对象声明为JFrame类的对象
JFrame frame=new FirstFrame();而不是声明为所继承的FirstFrame类的对象
FirstFrame frame=new FirstFrame();
?两者有何区别?源程序如下:
import javax.swing.*;
class FirstFrame extends JFrame
{
public FirstFrame()
{
setTitle("FirstFrame");
setSize(300,200);
}
}
public class FirstTest
{public static void main(String[] args)
{
JFrame frame=new FirstFrame();
frame.show();
}
}
 
>JFrame frame=new FirstFrame();
>FirstFrame frame=new FirstFrame();

1、以上兩者均可使用;
2、JFrame 是 FirstFrame 的 父類, new FirstFrame() 生成一個子類,是因為子類可以直接賦值給父類。
 
我还有一点不明白,既然声明为了JFrame的对象,那在程序运行后它为什么会显示出FirstFrame
的标题?是不是JFrame类中也有一个setTitle()函数,如果是这样为什么不直接声明一个JFrame
的对象而是先由JFrame派生出FirstFrame类再用FirstFrame类的构造函数去初始化对象呢?
 
你看點面向對象的書就明白了。
 
构造这个FirstFrame是为了给你一个例子。是告诉你可以这么声明类并初始化。
仅就上面的例子来看,这个FirstFrame确实没有什么实际的意义。
 
JFrame frame=new FirstFrame();
FirstFrame frame=new FirstFrame();

两个frame定义的类型是不同的,但他构造的对象是一样的类型,也就是说他在运行期内的类型
是一样的。都是FristFrame()。 因为你都用了 new FirstFrame()。 所以他们的标题是
一样的。
如果你用JFrame frame=new JFrame();,那你就必须设置title来让他们标题一样了。
这样说你明白不明白,也就是一个reference有类型和运行期构造的类型。

 
接受答案了.
 
后退
顶部