1、重写(Override)
重写是子类对允许访问的父类的方法进行重新编写的过程,方法名、返回值和参数列表不能变,方法中的内容可以变化。特点就是:子类可以根据自己的需要对父类的方法进行改变,定义符合自己的行为特征。
public class Person {
public String name;
int age;
protected void eat(){
System.out.println("人会吃饭。。。");
}
protected void getName(String name){
this.name = name;
System.out.println("读取Person的姓名:" + this.name);
}
}
public class Man extends Person{
public void eat(){
//super.eat();
System.out.println("男人会劳动。。。");
}
public void getName(String name){
this.name = name;
System.out.println("重写了父类的方法:" + super.name);
}
public void getName(String name, int age){
this.name = name;
this.age = age;
System.out.println("读取Man的姓名:" + this.name + " ,age = " + this.age);
}
}
public class TestMan {
public static void main(String[] args) {
Person p1 = new Person();
Man p2 = new Man();
p1.eat();
p1.getName("Lily");
p2.eat();
p2.getName("老王");
p2.getName("Lucy", 12);
}
}
/*
人会吃饭。。。
读取Person的姓名:Lily
男人会劳动。。。
重写了父类的方法:老王
读取Man的姓名:Lucy ,age = 12
*/
2、重载(Overload)
重载是在同一个类里边,可以定义多个方法名相同但参数列表必不相同并且返回值可以不相同,异常可以不同,访问修饰符可以不同的各种方法。
public class Overloading {
public int test(){
System.out.println("test1");
return 1;
}
public void test(int a){
System.out.println("test2");
}
//以下两个参数类型顺序不同
public String test(int a,String s){
System.out.println("test3");
return "returntest3";
}
public String test(String s,int a){
System.out.println("test4");
return "returntest4";
}
public static void main(String[] args){
Overloading o = new Overloading();
System.out.println(o.test());
o.test(1);
System.out.println(o.test(1,"test3"));
System.out.println(o.test("test4",1));
}
}
/*
test1
1
test2
test3
returntest3
test4
returntest4
*/
3、区别
- 方法重载是一个类中定义了多个方法名相同,而他们的参数的数量不同或数量相同而类型和次序不同,则称为方法的重载(Overloading)。
- 方法重写是在子类存在方法与父类的方法的名字相同,而且参数的个数与类型一样,返回值也一样的方法,就称为重写(Overriding)。
- 方法重载是一个类的多态性表现,而方法重写是子类与父类的一种多态性表现。