重写
重写:在子类中重写继承自父类的方法,方法名和参数列表相同,方法实现不同。
public class Override {
public static void main(String[] args) {
1. //方法重写测试
double fee = 480;//实际学费double money = 500;//家长给的
Parent p = new Parent();
Child1 c1 = new Child1();
Child2 c2 = new Child2();
p.pay(money, fee);
c1.pay(money, fee);
c2.pay(money, fee);
2.//动态方法调度:指向对象不同,方法不同,仅局限父类方法被重写的情况,子类中未被重写的方法,父类无法访问
Parent dad = null;
Child1 son1 = new Child1();
Child2 son2 = new Child2();
dad = son1;//将son1地址给了dad,爸爸帮大儿子做炒饭
dad.cook();
dad = son2;//爸爸帮小儿子包饺子
dad.cook();
dad = new Parent();//只有父类对象才能调用自己的方法
dad.cook();
}
}
//封装父类的功能
class Parent{
1.//爸爸的任务
public void cook(){System.out.println("爸爸的任务:做饭");
}
public void pay(double money,double fee){
System.out.println("家长让交"+fee+"剩下"+(money-fee)+"当零花钱");
}
}
//封装大儿子
class Child1 extends Parent{
1. //大儿子做饭的任务
public void cook(){System.out.println("帮大儿子做炒饭");
}
System.out.println("没交学费"+fee+"都买了玩具");
}
}
//封装二儿子
class Child2 extends Parent{
1.//二儿子具体做饭任务
public void cook(){System.out.println("帮二儿子包饺子");
}
public void pay(double money,double fee){
//第一件事:交学费。使用super关键字调用父类方法的基础上再重写另一个新的方法
super.pay(money, fee);//使用父类的方法
//第二件事:将剩余的钱给了爸爸
System.out.println("给爸爸的");
}
}
重载和重写区别
重载:“一个类中”定义多个相同的方法名,但是“参数列表不同”的方法。在“编译时”,根据“传入参数逇数据类型顺序”来决定“预选”绑定哪个方法。
重写:在“继承关系的子类里”定义“和父类中方法签名完全相同”的方法,在“程序运行时”,根据“对象的类型”不同“动态调度”,执行子类中重写的方法还是父类中的原始方法。
(只看等号右侧)