BlueJ环境下如何从其他类获取Id、Name字段到当前Store类使用
解决方案
问题核心原因
你当前的代码存在3个核心问题:
- 没有定义存储
Id、Name字段的目标类,Store类本身没有这两个属性,直接在getMember()中返回会直接编译报错 - 同一个方法内连续写两个
return语句无效,第一个return执行后方法就会终止运行,第二条返回逻辑永远不会触发 - 你定义的
private Store member;属性类型错误,你需要关联的是存储会员信息的类,而非Store类自身
第一步:新增会员信息类
首先新建Member类,用来封装会员的id和name属性:
public class Member { private String id; private String name; // 构造方法,初始化会员id和name public Member(String id, String name) { this.id = id; this.name = name; } // 对应属性的getter方法 public String getId() { return id; } public String getName() { return name; } }
第二步:修改Store类代码
修改后的Store类代码如下:
public class Store { public String storeName; public int total; // 将属性类型从Store改为Member,存储会员对象 private Member member; public Store(String newStoreName, int newTotal) { storeName = newStoreName; total = newTotal; } public String getStoreName() { return storeName; } public int getTotal() { return total; } // 新增设置会员的方法,给member属性赋值 public void setMember(Member member) { this.member = member; } // 单独获取会员id public String getMemberId() { // 先判空避免空指针异常 return member == null ? null : member.getId(); } // 单独获取会员name public String getMemberName() { return member == null ? null : member.getName(); } // 如果需要一次性返回完整会员信息可以用这个方法 public String getMemberFullInfo() { if (member == null) { return "无注册会员"; } return "会员ID:" + member.getId() + ",会员姓名:" + member.getName(); } public void memberRegister1() { System.out.println("Salford Thrifty Store welcomes"); } }
调用示例
你可以在测试类或者BlueJ的交互界面按以下逻辑调用:
// 先创建会员对象 Member member1 = new Member("M001", "张三"); // 创建门店对象 Store store = new Store("索尔福德节俭店", 100); // 给门店绑定注册会员 store.setMember(member1); // 调用方法获取会员信息 System.out.println(store.getMemberFullInfo()); System.out.println("会员ID:" + store.getMemberId()); System.out.println("会员姓名:" + store.getMemberName());
内容的提问来源于stack exchange,提问作者eggy5901
相关产品推荐
相关产品推荐

