class ThisIsASubClass {
private int count=0;
public ThisIsASubClass(){
}
public ThisIsASubClass(int num){
count=num;
}
public int disp(){
return count;
}
}
public class MainClass {
public static void main(String args[]){
ThisIsASubClass obj=new ThisIsASubClass();
ThisIsASubClass obj1=new ThisIsASubClass(12);
System.out.print(obj.disp());
}
}
我将输出设为0,但我的输出为12.我尝试使用方法很好但使用构造函数我不知道我错过了什么点。
答案 0 :(得分:0)
您通过new ThisIsASubClass
创建的每个实例(对象)都有自己的count
字段。您正在将该字段初始化为0
。你有两个构造函数:一个不带任何参数而不改变count
,一个带int
参数而 改变count
在main
中,您对构造函数进行了两次单独的调用,首先是不带参数的调用,只留下count
:
ThisIsASubClass obj=new ThisIsASubClass();
...然后是第二个,与构造函数分开,它接受一个参数并设置count
:
ThisIsASubClass obj1=new ThisIsASubClass(12);
您创建的两个单独实例(对象)之间没有交互。因此,您最终会得到obj
引用的count
等于0
的实例,以及obj1
引用的count
等于{{0}}的单独实例{1}}:
+-----------+ obj-------->| count: 0 | +-----------+ +-----------+ obj1------->| count: 12 | +-----------+
然后此行使用12
引用的实例:
obj
...因此输出System.out.print(obj.disp());
,因为0
的{{1}}是obj
。如果你做了
count
...相反,你会得到0
。
答案 1 :(得分:0)
创建类的实例时,每个实例都有自己的实例变量。这些变量不会跨实例共享。
在这种情况下,您在obj1
中将count的值设置为12,但是您正在打印未通过构造函数初始化的obj
计数值。所以它会打印0。
答案 2 :(得分:0)
如果count
,0
的初始值。
然后查看默认构造函数。
public ThisIsASubClass(){
//there is nothing inside
}
调用默认构造函数后 count=0;
。如果在默认构造函数之后调用方法disp()
,则打印返回零;
现在查看ThisIsASubClass(int num)
构造函数。
count=num;
。如果在此构造函数后调用方法disp()
,则返回num
;
然后查看您创建的对象。
ThisIsASubClass obj=new ThisIsASubClass();
ThisIsASubClass obj1=new ThisIsASubClass(12);
现在您应该了解obj.disp() = 0
和obj1.disp() = 12