Java中如何从其他文件通过Animal类访问Breed类的变量?
解决方案
首先明确两个核心问题:
- Breed类的成员变量是
private修饰的,外部类无法直接访问,必须通过类中提供的getter方法获取。 - Animal类中的
breed成员是默认访问权限(无修饰符),如果你的调用类和Animal不在同一个包下,无法直接通过animal.breed访问,必须用Animal的getBreed()方法获取Breed实例。
正确访问方式
1. 同包下调用
如果调用类和Animal、Breed在同一个包中,可以通过两种方式获取Breed的变量值:
Animal animal = new Animal(); // 方式1:通过Animal的getter获取Breed实例,再调用Breed的getter String afador = animal.getBreed().getAfador(); // 方式2:直接访问animal.breed(同包允许默认权限访问),再调用Breed的getter String afaird = animal.breed.getAfaird();
2. 不同包下调用
必须通过Animal的getBreed()方法获取Breed实例,再调用对应的getter:
Animal animal = new Animal(); String aussiepom = animal.getBreed().getAussiepom();
优化建议
- 遵循封装原则,把Animal类中的
breed成员改为private,只通过getBreed()和setBreed()访问,避免直接暴露成员变量。 - 若想简化访问逻辑,可以在Animal类中添加转发的getter方法,无需每次都先获取Breed实例:
public class Animal { // ... 原有代码 ... private Breed breed; // 改为private // 添加转发方法 public String getBreedAfador() { return breed != null ? breed.getAfador() : null; } public String getBreedAfaird() { return breed != null ? breed.getAfaird() : null; } public String getBreedAussiepom() { return breed != null ? breed.getAussiepom() : null; } }
之后就可以直接通过animal.getBreedAfador()获取对应值。
- 注意初始化Breed实例,避免空指针异常,比如在Animal的构造方法中初始化:
public Animal() { this.breed = new Breed(); }
内容的提问来源于stack exchange,提问作者willy
相关产品推荐
相关产品推荐

