一、方法重写原因
如果从父类继承的方法不能满足子类的需求,可以在子类中对父类的同名方法进行重写(覆盖),以符合需求。
二、方法重写(方法覆盖)必须满足如下要求
1.重写方法和被重写方法必须具有相同的方法名
2.重写方法和被重写方法必须具有相同的参数列表
3.重写方法的返回值类型必须和被重写方法的返回值类型相同或者是其子类
4.重写方法不能缩小被重写方法的访问权限。
三、方法重载和方法重写的区别
比较项位置方法名参数列表返回值权限修饰符
方法重载同一个类中相同不同无关无关
方法重写子类中相同相同相同或是其子类不能比父类更严格
四、重写toString()方法
当System.out.println()输出实例化对象时,会自动调用toString方法,此时输出的就不是
地址,而是你想输出的内容。
1)手写:
public String toString() {
return "姓名:" + name;
}
2)自动生成myeclipse快捷键shift+alt+s,idea快捷键alt+insert
@Override//注解告诉Java虚拟机这是重写方法
public String toString() {
return "TestExtends [name=" + name + "]";
}
五、重写equals方法,
当实例化对象调用equals时,可以根据你规定的比较条件进行比较
1)自动生成myeclipse快捷键shift+alt+s,idea快捷键alt+insert
@Override//注解告诉Java虚拟机这是重写方法
public boolean equals(Object obj) {//返回值为布尔类型
if (this == obj)//直接比较是比较地址
return true;
if (obj == null)//空指针
return false;
if (getClass() != obj.getClass())//getClass()的结果:class 包名.类名
return false;
TestExtends other = (TestExtends) obj;//多态的Object向下转型为TestExtends类
if (name == null) {//name属性为空时
if (other.name != null)
return false;
} else if (!name.equals(other.name))//字符串调用equals方法则比较的是内容
return false;
return true;
}