面向对象编程如何工作?

ven*_*nom 2 java oop

我不确定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)

现在的问题:我是有工作field1instanceOfClass1someMethod(field)

Dan*_*ory 5

这取决于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也不会受到影响:它保留原始数字,因为它被复制了而不是引用.

希望这有助于清理一些事情.