Java中Student类无需Getter/Setter直接引用Major的majorId可行吗?
不用Getter/Setter让Student类引用Major的majorId的方法
你写的public String Major.majorId;是Java语法错误,不能直接把另一个类的成员变量声明为当前类的成员。下面给出几种不用Getter/Setter就能访问majorId的可行方案:
方案一:将Major的majorId改为public(不推荐)
直接修改Major类中majorId的访问修饰符为public,然后让Student持有Major的实例,就能直接访问:public class Major { public String majorId; // 改为public访问权限 private ArrayList<Student> studentList; } public class Student extends Person { private static String cod; private Major major; // 持有Major类的实例引用 private ArrayList<Subject> subjectList; // 使用时直接访问majorId public void printMajorId() { System.out.println(major.majorId); } }注意:这种方式破坏了面向对象的封装性,外部类可以随意修改majorId的值,容易引发bug,仅适合简单测试场景。
方案二:把Student作为Major的非静态内部类
非静态内部类可以直接访问外部类的私有成员,不需要Getter/Setter:public class Major { private String majorId; private ArrayList<Student> studentList; // 把Student定义为Major的内部类 public class Student extends Person { private static String cod; private ArrayList<Subject> subjectList; public void getMajorId() { String id = majorId; // 直接访问外部类的private成员 } } }这种方式的弊端是Student和Major的耦合度极高,Student无法脱离Major实例单独存在,仅适合两者逻辑绑定紧密的场景。
方案三:如果majorId是全局静态值,用静态成员访问
如果majorId是所有专业共享的静态标识,可以把它设为Major的静态成员,然后Student直接通过类名访问:public class Major { public static String majorId; // 静态成员变量 private ArrayList<Student> studentList; } public class Student extends Person { private static String cod; private ArrayList<Subject> subjectList; public void useMajorId() { String id = Major.majorId; // 直接通过类名访问静态变量 } }注意:如果每个Major实例有独立的majorId,这种方式不适用。
总结
以上几种方法都能绕开Getter/Setter访问majorId,但都会牺牲一定的封装性或增加类耦合度。在正式项目中,更推荐使用Getter/Setter方法,既能保证封装性,也能在后续需要时方便地添加逻辑(比如参数校验、日志记录等)。
内容的提问来源于stack exchange,提问作者Matias04_
相关产品推荐
相关产品推荐

