先说下重载(Overloading):
(1)方法重载指的是在一个类中有几个同名函数同时存在,但具有不同的参数个数或者参数类型不同。
(2)调用方法时根据传递的不同参数个数或者参数类型来决定使用哪个方法,体现了多态性。
class Person {
private String name;
Person(String name){
this.name = name;
}
void eat(){
System.out.println(this.name+" eat nothing");
}
void eat(String m){
System.out.println(this.name + " eat " + m);
}
void eat(String m, String n){
System.out.println(this.name + " eat " + m + " and " + n);
}
public static void main(String args[]) {
Person p = new Person("Jack");
p.eat();
p.eat("meat");
p.eat("meat","fish");
}
}
运行结果:
Jack eat nothing
Jack eat meat
Jack eat meat and fish
根据传递不同参数个数来调用不同的方法,体现了多态性。
重写(Overriding)
(1)体现出父类与子类之间的多态性,如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 。在Java中,子类可继承父类中的方法,而不需要重新编写相同的方法。但有时子类并不想原封不动地继承父类的方法,而是想作一定的修改,这就需要采用方法的重写。
(2)若子类中的方法与父类中的某一方法具有相同的方法名、返回类型和参数表,则新方法将覆盖原有的方法。如需父类中原有的方法,可使用super关键字,该关键字引用了当前类的父类。
(3)子类函数的访问修饰权限不能少于父类的;
// 父类
class Person {
protected String name;
Person(String name){
this.name = name;
}
void eat(String m){
System.out.println(this.name + " eat " + m);
}
}
//子类Young
public class Young extends Person{
Young(String name) {
super(name);
}
void eat(String m, String n){
System.out.println(name + " eat "+ m +" and " + n);
}
public static void main(String args[]){
Young y1 = new Young("Young");
y1.eat("meat","fish");
}
}
运行结果:
Young eat meat and fish