跟日记本一起学JAVA!相信你可以的,加油~
建议你们在电脑上看。
------------------------------------------------------------------------------------------------------------------------------
-
要求:定义 Student 类,属性包括学号(id)、姓名(name)、年龄(age),进行封装并提供 get/set 方法及构造方法;重写 toString 方法,格式为 "id:xxx,name:xxx,age:xxx";重写 equals 方法,学号相同则为相同对象。编写测试类,创建两个 Student 对象,输入信息并判断是否相同,打印对象信息。
-
编程实现商品类(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
-
子类重写父类普通方法
-
实现接口里的抽象方法(Java 5以后支持)
-
重写Object类方法: toString()、equals()
不能用:
-
不能修饰变量
-
不能修饰构造方法
-
方法参数不一样,不是重写,那叫重载(overload)
区分两个极易混淆名词
-
重写(Override) @Override:父子类,方法名、参数完全一样;发生在继承。
-
重载(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 。
跟我一步步学,走吧。
未完待续。。。。