父类的方法introduce()已经无法满足子类的需求,怎么办?同理,Object类的toString()已经无法满足Anim
【示例10】实现方法重写
public class Animal {//extends Object
protected String color;//颜色
private int age;//年龄
public Animal() {
super();
}
public Animal(String color, int age) {
this.color = color;
this.age = age;
}
public void introduce(){
System.out.println(color+" "+age);
}
@Override
public String toString() {
//return super.toString();
return "Animal[color="+color+",age="+age+"]";
}
}
public class Dog extends Animal{
private String nickName;//昵称
public Dog() {
}
public Dog(String color, int age){
}
public Dog(String color, int age, String nickName){
// this.color = color;
// this.age = age;
super(color,age);
this.nickName = nickName;
}
public void introduce(){
//this.introduce();
//super.introduce();
System.out.println(color+" "+this.getAge()+" "+nickName);
}
public void guard(){
//this.guard();
//super.guard();
System.out.println("Dog guarding......");
}
@Override
public String toString() {
//return super.toString()+" "+nickName;
return "Dog[name="+color+",age="+getAge()+
",nickName="+this.nickName+"]";
}
}
al类、Dog类的需求,怎么办?可通过方法重写(override)解决,或者称为方法覆盖。
总 | 方法重载和方法重写(覆盖)是面向对象中两个重要概念,其实这两个概念之间没有什么关系,但是毕竟都是关于方法的,毕竟容易引起混淆。对此我也做了一些归纳,感觉能够把这两个概念很好的区分开。我打算从总体区别、细节区别两个方面来说明。 | ||||||||||||||||||||||||||||||
分 | 总体的区别:最主要的区别,是解决的问题不同,即作用不同。
细节的区别:一个方法的声明自左向右包括权限修饰符、方法返回值、方法名、参数列表、抛出的异常类型等。下面从这几方面说明区别
| ||||||||||||||||||||||||||||||
总 | 重载实例:构造方法重载、println()方法重载 重写实例:Object类的toString()、equals()、hashCode()等都可以被子类重写 | ||||||||||||||||||||||||||||||
可选 |
|