我熟悉编程,但我正在学习Java。为什么在Java中说
是可以的public void actionPerformed(ActionEvent e)
{
JTextField[] fileField = new JTextField[inputBox.getSelectedIndex()];
JLabel[] fieldLabel = new JLabel[inputBox.getSelectedIndex()];
for(int i = 0; i < fileField.length; i++)
{
fieldLabel[i].setText("File "+i+":"); //NULL POINTER EXCEPTION HERE
fieldPanel.add(fieldLabel[i]); //NULL POINTER EXCEPTION HERE
fieldPanel.add(fileField[i]);
}
centerPanel.add(fieldPanel);
repaint();
revalidate();
}
其中A与B不同(显然)。我知道A test = new B()
部分只是调用B类的初始化方法。令我困惑的是你为什么要这样做? new B()
是否在计算机内存中创建了对象,初始化为A?
这个问题与接口无关。为什么这被标记为重复我不知道...
答案 0 :(得分:0)
A test
部分声明您有一个名为test
的变量,其类型为A
。=
部分表示您将左侧的test
设置为右侧的内容。new B()
部分意味着在内存中创建类型为B
的新对象。因此,在内存中创建对象的唯一部分是第3部分new B()
。为了更清楚地看到这一点,你也可以这样做:
A test = existingObject;
在这种情况下,没有创建新对象。 test
被分配了一个已经存在于内存中的对象,因此您的示例中的new B()
创建了该对象。
就为变量分配不同类型的对象而言,对象必须是变量类型的子类(或实现)。因此,如果B
是A
的子类(或实现),则A test = new B();
将正常工作。
使用变量test
时,只有为类(或接口)A
定义的方法才适合您。您必须将其重新分配给B
类型的变量才能访问B
特有的方法。