gpt4 book ai didi

java - 为什么可以在没有 getter 的情况下访问字段?

转载 作者:行者123 更新时间:2023-11-30 06:34:26 31 4
gpt4 key购买 nike

我有以下示例:

package cage;

import java.util.HashSet;
import java.util.Set;

import animals.Animal;

public class Cage<T extends Animal> { //A cage for some types of animals
private Set<T> set = new HashSet<T>();

public void add(T animal) {
set.add(animal);
}

public void showAnimals() {
for (T animal : set) {
System.out.println(animal.getName());
}
}

public void transferTo(Cage<? super T> cage) {
cage.set.addAll(this.set);
}
}

主类:

package exe;

import cage.Cage;
import animals.Animal;
import animals.Ape;
import animals.Lion;
import animals.Rat;

public class Main {

public static void main(String[] args) {
System.out.println("Test with super........");
Cage<Animal> animals = new Cage<Animal>();
Cage<Lion> lions = new Cage<Lion>();
animals.add(new Rat(true, 4, "Rat", true)); // OK to put a Rat into a Cage<Animal>
lions.add(new Lion(true, 4, "King", 9));
lions.transferTo(animals); // invoke the super generic method -> animals is SUPER of lion.
animals.showAnimals();
}
}

类笼中有一个调用

cage.set.addAll(this.set);

虽然我既没有 getSet 方法也没有“set”静态,但为什么用点符号调用“cage.set...”会起作用?技术背景如何?

最佳答案

您只是在使用现场访问权限。拥有 getSet() 方法不会有任何区别,因为 Java 编译器不会自动为您使用访问器方法。

我怀疑您缺少的是 private 访问权不是由您尝试访问其成员的对象 决定的 - 中的代码Cage 可以访问任何其他 Cage 的私有(private)成员,包括 set 字段。

Section 6.6 of the Java Language Specification描述访问控制,包括:

Otherwise, if the member or constructor is declared private, then access is permitted if and only if it occurs within the body of the top level class (§7.6) that encloses the declaration of the member or constructor.

关于java - 为什么可以在没有 getter 的情况下访问字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6971463/

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