重写

重写:在子类中重写继承自父类的方法,方法名和参数列表相同,方法实现不同。

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("爸爸的任务:做饭");

}


2.//交学费的方法:找家长要的钱和实际学费
public void pay(double money,double fee){
System.out.println("家长让交"+fee+"剩下"+(money-fee)+"当零花钱");
}

}
//封装大儿子

class Child1 extends Parent{


      1. //大儿子做饭的任务

public void cook(){
System.out.println("帮大儿子做炒饭");

}


2.public void pay(double money,double fee){
System.out.println("没交学费"+fee+"都买了玩具");
}

}

//封装二儿子

class Child2 extends Parent{


         1.//二儿子具体做饭任务

public void cook(){
System.out.println("帮二儿子包饺子");

}


2.//小儿子重写交学费的方法
public void pay(double money,double fee){
//第一件事:交学费。使用super关键字调用父类方法的基础上再重写另一个新的方法
super.pay(money, fee);//使用父类的方法
//第二件事:将剩余的钱给了爸爸
System.out.println("给爸爸的");
}

}

重载和重写区别

重载:“一个类中”定义多个相同的方法名,但是“参数列表不同”的方法。在“编译时”,根据“传入参数逇数据类型顺序”来决定“预选”绑定哪个方法。

重写:在“继承关系的子类里”定义“和父类中方法签名完全相同”的方法,在“程序运行时”,根据“对象的类型”不同“动态调度”,执行子类中重写的方法还是父类中的原始方法。


(只看等号右侧)

猜你喜欢

转载自blog.csdn.net/qq_40531768/article/details/80094553