我不确定OOP中的一些东西.
如果我有Class1,有一些私人领域,例如private Field field1,和make
getField1 () {
return field1;
}
Run Code Online (Sandbox Code Playgroud)
然后我有一些构造函数的类
public Class2 (Field field) {
someMethod(field);
}
Run Code Online (Sandbox Code Playgroud)
然后我在Class3中调用Class2的构造函数,如:
Class2 cl = new Class2(instanceOfClass1.getField1());
Run Code Online (Sandbox Code Playgroud)
现在的问题:我是有工作field1的instanceOfClass1在someMethod(field)?
这取决于field是值还是引用.
作为参数传递时,将复制值类型.参考类型不是; 该函数只是递送一个指向原始值的"引用",它所做的任何更改都会反映在原始值中.
给定类型是值还是引用取决于您的特定编程语言.一般来说,基本的整数和布尔类型通常是值类型,其他一切都在空中 - 一些语言创建字符串值,而其他语言将它们视为引用等.
编辑:既然你提到你正在使用Java,这里有一个简短的程序,它演示了值和引用类型:
class ClassOne {
public int myInt;
}
class ClassTwo {
public int myInt;
public ClassTwo(ClassOne c)
{
myInt = c.myInt;
c.myInt = 3;
}
}
public class main
{
public static void main(String[] args)
{
ClassOne c = new ClassOne();
c.myInt = 1;
System.out.println("C1: " + c.myInt);
ClassTwo c2 = new ClassTwo(c);
System.out.println("C2: " + c2.myInt);
System.out.println("C1: " + c.myInt);
}
}
Run Code Online (Sandbox Code Playgroud)
运行此程序将给出输出:
C1: 1
C2: 1
C1: 3
Run Code Online (Sandbox Code Playgroud)
在此程序中,ClassOne和ClassTwo都包含整数字段 - 值类型.ClassTwo在其构造函数中获取ClassOne参数(引用类型),并根据给定的ClassOne对象的值设置自己的整数字段,然后更改ClassOne对象的值.
因为类是引用类型,所以在ClassTwo构造函数中更改ClassOne对象会导致更改原始对象.(在这里的main函数中,那是c.)但是因为整数是值类型,即使c2更改c.myInt其构造函数的值,因为它事先设置了自己的值,c2.myInt也不会受到影响:它保留原始数字,因为它被复制了而不是引用.
希望这有助于清理一些事情.