1.子类重写父类的方法,调用方法的时候是就近取反原则,如果子类重写了父类的方法就调用子类的这个方法,而不是调用父类的
class Father{
public void show(){
System.out.println("我是父类的方法!");
}
}
class Son{
// 父类也存在这个show方法,我子类重写了父类的这个方法,调用show方法的话调用的是Son(子类)的这个方法
public void show(){
System.out.println("我是子类的方法!");
}
}
class Test{
public void static main(String [] args){
Son son = new Son();
son.show();
// 输出信息: 我是子类的方法!
}
}
2.方法的重写:
1.子类重写父类的方法要求,方法名,参数列表必须一致
class Father{
public void show(String name){
System.out.println("我是父类的方法!" + name);
}
}
class Son extends Father{
public void show(String name){
System.out.println("我是子类的方法!");
}
}
2.子类重写父类的方法要求,子类返回值类型必须和父类一致或者是父类反回值类型的子类,(例如父类返回值类型是Object,子类可以是String)
class Father{
public String show(){
return null;
}
public Object show2(){
return null;
}
}
class Son extends Father{
public String show(){
return null;
}
public String show2(){
return null;
}
}
3.子类重写父类的方法要求,子类的方法修饰符必须和父类一致或者是父类的上级(子类不能缩小父类方法的访问权限)
class Father{
protected void show(){
System.out.println("我是父类的方法!");
}
public void show2(){
System.out.println("我是公开的方法!");
}
}
class Son {
public void show(){
System.out.println("我重写成功,我的访问权限变大了!");
}
protected void show2(){ ×
System.out.println("我重写失败,访问权限不能变小!");
}
}
4.子类重写父类方法之后再调用父类的方法
class Father{
public void show(){
System.out.println("我是父类的方法!");
}
}
class Son extends Father{
public void show(){
System.out.println("我是子类的方法!");
super.show();
}
}
// 输出信息就是 我是子类的方法! 我是父类的方法!