JAVA十三(练习课)

跟日记本一起学JAVA!相信你可以的,加油~

建议你们在电脑上看。

------------------------------------------------------------------------------------------------------------------------------

  1. 要求:定义 Student 类,属性包括学号(id)、姓名(name)、年龄(age),进行封装并提供 get/set 方法及构造方法;重写 toString 方法,格式为 "id:xxx,name:xxx,age:xxx";重写 equals 方法,学号相同则为相同对象。编写测试类,创建两个 Student 对象,输入信息并判断是否相同,打印对象信息。​

  2. 编程实现商品类(Goods)的比较​

要求:定义 Goods 类,属性有商品编号(goodsId)、商品名称(goodsName)、价格(price),完成封装、构造方法;重写 equals 方法,商品编号相同则为相同商品;重写 toString 方法展示商品信息。编写测试类,输入两个商品信息,判断是否为同一商品并打印结果。

---------------------------------------------------------------------------------------------------------------------------------一.

java 复制代码
package dmk.testobject;

public class Student {
    private int id  ;
    private String  name ;
    private int   age ;

    public Student(int id, String name, int age) {
        this.id = id;
        this.name = name;
        this.age = age;
    }//构造方法
//get/set方法

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Student{" +
                "id:296688" + id +
                ", name:dmk'" + name + '\'' +
                ", age:18" + age +
                '}';
    }

构造方法与get和set方法都已构造。(这两个方法的构造上节课已讲,不用打出来,而是用右键....)

并且也重写了toString方法,因为是字符型""里面的我改了改,把id,name,age后面都写上了。

java 复制代码
@Override
    public String toString() {
        return "Student{" +
                "id:296688" + id +
                ", name:dmk'" + name + '\'' +
                ", age:18" + age +
                '}';
    }

这里的**@Override。**

@Override:

不是"改写",叫:重写(覆盖),是注解(Annotation)。

1.作用

@Override 写在子类的方法上面,表示:这个方法重写父类/接口的方法。

告诉编译器:我打算重写父类的方法,请帮我检查语法对不对。

eg:

java 复制代码
class Animal {
    public void speak(){
        System.out.println("动物发声");
    }
}

class Dog extends Animal{
    //重写父类speak方法
    @Override
    public void speak() {
        System.out.println("汪汪汪");
    }
}
 

2.关键:编译器校验(最重要)

加上 @Override ,编译器会帮你检查:

1.父类是不是真的有这个方法;

2.方法名、参数列表、返回值必须符合重写规则。

如果你手滑写错方法名:

java 复制代码
@Override
public void speek(){  //拼写错 speek,不是speak
    System.out.println("汪汪");
}

此时直接编译报错!

如果不写 @Override ,编译器不会报错,它会当成子类新增一个全新方法,而不是重写,这就是隐藏bug。是的,它不会报错。

@Override 只是一个注解,不改变程序运行逻辑,只做编译期检查。就算删掉注解,代码运行效果不变,只是失去语法校验。

3.哪些地方能用@Override

  1. 子类重写父类普通方法

  2. 实现接口里的抽象方法(Java 5以后支持)

  3. 重写Object类方法: toString()、equals()

不能用:

  • 不能修饰变量

  • 不能修饰构造方法

  • 方法参数不一样,不是重写,那叫重载(overload)

区分两个极易混淆名词

  1. 重写(Override) @Override:父子类,方法名、参数完全一样;发生在继承。

  2. 重载(Overload):同一个类里面,方法名一样,参数不一样;没有注解。

java 复制代码
// 重载:同一个类,方法名相同,参数不同,不需要@Override
public void say(){}
public void say(String s){}

总结

@Override :标记这是重写父类方法,交给编译器帮你校验有没有写错;

口语有人说成改写,但Java标准术语叫重写/覆盖。

这里重写equals方法,我不太会了。

编写测试类,创建两个 Student 对象,输入信息并判断是否相同,打印对象信息。​

java 复制代码
package yh.testobject;

public class Student2 {
    public static void main(String[]args){
        Student t =new Student(296688,"dmk",18);
        System.out.println(t);

        Student t2 = new Student(296688,"dmk",18);

        System.out.println(t==t2);

        System.out.println(t.equals(t2));
    }



}

二.

java 复制代码
package yh.testobject;

public class Goods {
    private int goodsId;
    private  String goodsName;
    private  int price;

    public Goods(int goodsId, String goodsName, int price) {
        this.goodsId = goodsId;
        this.goodsName = goodsName;
        this.price = price;
    }

    public int getGoodsId() {
        return goodsId;
    }

    public void setGoodsId(int goosId) {
        this.goodsId = goosId;
    }

    public String getGoodsName() {
        return goodsName;
    }

    public void setGoodsName(String goodsName) {
        this.goodsName = goodsName;
    }

    public int getPrice() {
        return price;
    }

    public void setPrice(int price) {
        this.price = price;
    }

        @Override
        public boolean equals(Object obj) {
            if (this == obj) return true;
            if (obj == null || getClass() != obj.getClass()) return false;
            Goods goods = (Goods) obj;
            return goodsId == goods.goodsId;
        }

    @Override
    public String toString() {
        return "Goods{" +
                "goodsId:12" + goodsId +
                ", goodsName:泡泡球'" + goodsName + '\'' +
                ", price:36" + price +
                '}';
    }
}
java 复制代码
package yh.testobject;

public class goodsequals {
    public static void main(String[]args){
        Goods t =new Goods(12,"泡泡球",36);
        System.out.println(t);
        Goods t2 = new Goods(12,"泡泡球",36);
        System.out.println(t==t2);
        System.out.println(t.equals(t2));

    }

}

这里暂时可以不用scanf。

小技巧:IDEA进入源码解析:

eg:

快捷键:Ctrl + 鼠标左键,点 @Override 这个注解,直接跳源码;Windows快捷键 Ctrl+B ,Mac Command+B 。

跟我一步步学,走吧。

未完待续。。。。

相关推荐
磐链科技1 小时前
交易所开发全流程指南:从需求分析到上线运维的完整路线图
java
無限進步D1 小时前
Java Web 前端 简介
java·开发语言·前端·css·html·css3·web
聪明蛋子哟1 小时前
从LangChain到LangGraph:Python与Java双栈Agent开发实战对比
java·ai·langchain
三8442 小时前
Java 模板注入(FreeMarker)· 04 · 利用与绕过:payload 全集
java·web安全·freemarker·payload
平凡シンプル2 小时前
TCP UDP 网络通信插件 SL-Uniplugin-Tcp-Udp
网络·学习·uniapp·记录
RisunJan2 小时前
【地球脉动】地球日报 · 2026-09-14(过去24小时,非头条视角)
学习
xx~t2 小时前
嵌入式——单片机2
嵌入式硬件·学习·51单片机·串口·蜂鸣器
leikooo2 小时前
ARTS 0913: 双栈互补实现队列、CIDR 聚合化解路由膨胀与 AI 作弊串通绝非偶然 Bug
java·链表·个人开发
星间都市山脉2 小时前
Android16 SystemService.onBootPhase 调用时机
android·java·linux·windows·ubuntu