Seven_414 2024-04-16 14:59 采纳率: 0%
浏览 4

面对对象——套娃调用

#为什么我用User类调用Student的display方法时候,Course传给我的是一个地址。

学生对象类
package com.powernode.javase.oop_08;

public class Student {
    private String name;
    private String no;
    private Course course;

    public void selection(Course course){
        this.setCourse(course);
        System.out.println(this.getName()+"选课成功:"+getCourse());
    }
    public void cancel(){
        String courseName = this.getCourse().getName();
        this.setCourse(null);
        System.out.println(this.getName() + "退课成功:" + courseName);

    }
  public void display() {
      System.out.println("名字:" + getName() + " id" + getNo() + " 课程" + getCourse());
  }

    public Student(String name, String no) {
        this.name = name;
        this.no = no;


    }
    public Student(String name, String no,Course course) {
        this.name = name;
        this.no = no;
        this.course = course;

    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getNo() {
        return no;
    }

    public void setNo(String no) {
        this.no = no;
    }

    public Course getCourse() {
        return course;
    }

    public void setCourse(Course course) {
        this.course = course;
    }


}

课程对象类
package com.powernode.javase.oop_08;

public class Course {
    private String name;
    private String teacher;

    public void display(){
        System.out.println("课程名称:" + this.getName() + "授课老师:" + this.getTeacher());
    }

    public Course(String name, String teacher) {
        this.name = name;
        this.teacher = teacher;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getTeacher() {
        return teacher;
    }

    public void setTeacher(String teacher) {
        this.teacher = teacher;
    }
}

User类
package com.powernode.javase.oop_08;

public class Use {
    public static void main(String[] args) {
        Course c = new Course("java","杜老师");
        Student s = new Student("小白","123",c);
        s.display();


    }
}

运行结果
名字:小白 id123 课程com.powernode.javase.oop_08.Course@1b6d3586
  • 写回答

6条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-04-16 14:59
    关注

    引自免费微信小程序:皆我百晓生

    在Java中,当您看到类似于com.powernode.javase.oop_08.Course@1b6d3586这样的输出时,这是因为您尝试直接打印一个对象(在这个例子中是Course对象)。当您没有重写toString()方法时,Java会默认使用Object类中的toString()方法,它返回的是对象的内存地址。

    要解决这个问题,您需要在Course类中重写toString()方法,以便在打印Course对象时显示有意义的信息。下面是修改后的Course类:

    package com.powernode.javase.oop_08;
    
    public class Course {
        private String name;
        private String teacher;
    
        // 重写toString方法
        @Override
        public String toString() {
            return "课程名称: " + this.getName() + ", 授课老师: " + this.getTeacher();
        }
    
        public void display(){
            System.out.println(this.toString()); // 使用toString方法
        }
    
        public Course(String name, String teacher) {
            this.name = name;
            this.teacher = teacher;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public String getTeacher() {
            return teacher;
        }
    
        public void setTeacher(String teacher) {
            this.teacher = teacher;
        }
    }
    

    现在,当您在Student类的display()方法中打印getCourse()时,将会得到更友好的输出,显示课程的名称和授课老师。以下是更新后的Student类的display()方法:

    public void display() {
        System.out.println("名字:" + getName() + " id" + getNo() + " 课程" + getCourse());
    }
    

    运行这个程序后,输出将变为:

    名字:小白 id123 课程课程名称: java, 授课老师: 杜老师
    

    这样,您就能看到课程的详细信息了,而不是对象的内存地址。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 4月16日

悬赏问题

  • ¥15 使用rml 2016.10a数据集做半监督学习的自动调制识别
  • ¥25 使用cube ai 导入onnx模型时报错
  • ¥15 关于#微信小程序#的问题:用一个网页显示所有关联的微信小程序数据,包括每个小程序的用户访问量
  • ¥15 root的安卓12系统上,如何使apk获得root或者高级别的系统权限?
  • ¥20 关于#matlab#的问题:如果用MATLAB函数delayseq可以对分数延时,但是延时后波形较原波形有幅度上的改变
  • ¥15 使用华为ENSP软件模拟实现该实验拓扑
  • ¥15 通过程序读取主板上报税口的数据
  • ¥15 matlab修改为并行
  • ¥15 尝试访问%1服务的windows注册表时遇到问题。必须先解决此问题,然后才能运行安装过程。(请确认您正在使用管理员权限运行)373
  • ¥15 (关键词-运算放大器)