gpt4 book ai didi

java - 面向对象编程是如何工作的?

转载 作者:行者123 更新时间:2023-12-02 01:08:04 24 4
gpt4 key购买 nike

我不确定 OOP 中的一些事情。

如果我有 Class1,它有一些私有(private)字段,例如 private Field field1,然后 make

getField1 () {
return field1;
}

然后我有一些带有构造函数的类

public Class2 (Field field) { 
someMethod(field);
}

然后我在 Class3 中调用 Class2 的构造函数,如下所示:

Class2 cl = new Class2(instanceOfClass1.getField1());

现在的问题是:我是否在 someMethod(field) 中使用 instanceOfClass1field1

最佳答案

这取决于 field 是值还是引用。

作为参数传递时,值类型会被复制。引用类型不是;该函数只是传递一个指向原始值的“引用”,并且它所做的任何更改都会反射(reflect)在原始值中。

给定类型是值还是引用取决于您的特定编程语言。一般来说,基本的整数和 boolean 类型通常是值类型,其他一切都是悬而未决的——一些语言将字符串值,另一些语言将它们视为引用,等等。

编辑:既然您提到您正在使用 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);

}
}

运行该程序将给出输出:

C1: 1
C2: 1
C1: 3

在此程序中,ClassOne 和 ClassTwo 都包含一个整数字段——一种值类型。 ClassTwo 在其构造函数中采用 ClassOne 参数(一种引用类型),并根据给定的 ClassOne 对象的值设置自己的整数字段,然后更改 ClassOne 对象的值。

由于类是引用类型,因此更改 ClassTwo 构造函数中的 ClassOne 对象会导致原始对象发生更改。 (在此处的 main 函数中,即 c。)但是由于整数是值类型,即使 c2 更改了 c.myInt 的值它的构造函数,因为它预先设置了自己的值,c2.myInt 不受影响:它保留原始数字,因为它是复制的而不是引用的。

希望这有助于澄清一些事情。

关于java - 面向对象编程是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2532881/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com