1.重载
子类覆写父类的方法称为重载Override。
父类和子类拥有一摸一样的方法(方法的名字、返回值、参数是相同的,但是方法的语句是不一样的)
- 方法签名如果不同就不是重载,而是创建了一个新的方法。
- 加上@Override可以让编译器帮助检查是否进行了正确的覆写
- @Override不是必需的
Person.java
public class Person /*extends Object */{
protected String name;
private int age;
public Person(){
this.name = "王重阳";
}
public Person(String name){
this.name = name;
}
public void setAge(int age){
this.age = age;
}
public int getAge(){
return this.age;
}
public void run(){
System.out.println(name+" is running!
");
};
}
Student.java
public class Student extends Person{
private int score;
public Student(String name){
super(name);
}
public Student(){
super();
}
public int getScore(){
return this.score;
}
public void setScore(int score){
this.score = score;
}
@Override
public void run(){
System.out.printf("Student %s is running
", name);
}
}
Hello.java
public class Hello {
public static void main(String[] args){
//Person和Student拥有相同的run方法,
Person s = new Student("张三丰");
Person p = new Person();
s.run();
p.run();
}
}

Object定义的几个重要方法:
- toString:把instance输出为String
- equals:判断两个instance是否逻辑相等
- hashCode:计算一个instance的哈希值
Person.java使用Object的toString方法
public class Person /*extends Object */{
protected String name;
private int age;
public Person(){
this.name = "王重阳";
}
public Person(String name){
this.name = name;
}
public void setAge(int age){
this.age = age;
}
public int getAge(){
return this.age;
}
public void run(){
System.out.println(name+" is running!
");
};
}
Person.java覆写toString方法
public class Person /*extends Object */{
protected String name;
private int age;
public Person(){
this.name = "王重阳";
}
public Person(String name){
this.name = name;
}
public void setAge(int age){
this.age = age;
}
public int getAge(){
return this.age;
}
public void run(){
System.out.println(name+" is running!
");
};
public String toString(){
return "Person "+this.name;
}
}
Hello.java
public class Hello {
public static void main(String[] args){
Person p = new Person();
System.out.println(p);
System.out.println(p.toString());
}
}
覆写前和覆写后的Person,分别运行Hello.java。
3.super可以调用父类的被Override的方法
Person.java
public class Person /*extends Object */{
protected String name;
private int age;
public Person(){
this.name = "王重阳";
}
public Person(String name){
this.name = name;
}
public void setAge(int age){
this.age = age;
}
public int getAge(){
return this.age;
}
public void run(){
System.out.println(name+" is running!");
};
}
Student.java
public class Student extends Person{
private int score;
public Student(String name){
super(name);
}
public Student(){
super();
}
public int getScore(){
return this.score;
}
public void setScore(int score){
this.score = score;
}
@Override
public void run(){
super.run();
System.out.printf("Student %s is running
", name);
}
}
Hello.java
public class Hello {
public static void main(String[] args){
Person s = new Student();
s.run();
}
}
