面向对象:继承;多态

继承:

关键词:extends

可以把父类中的相关内容直接继承到子类,子类就不需要在重新定义。

public class Jia extends JiSuan {
    public void JieGuo(){
        double s=this.getNum1()+this.getNum2();
        System.out.println(s);
    }

这样就是jia继承了JiSuan

private的成员无法被继承

public,protected永远被继承。

默认的,只有在当前包中可以被继承。

子类的成员变量与成员方法也是可以被继承的:它们有两种操作:一种是扩展,一种是重写。

带有构造函数的继承:

如果父类中带有无参数的构造函数。子类中的构造函数,按照正常写法即可。

如果父类中没有无参构造函数,只有有参构造函数。在子类的构造函数中第一行必须用super()给父类构造传递参数,调用父类构造。

当父类的构造函数中的参数有几个时,那么在写子类中的构造函数时,super()中的参数就要写几个

public class QiChe {
    protected String PinPai;
    protected String CheMing;
    protected double JiaGe;
    
    public QiChe(String pinpai){
        this.PinPai=pinpai;
    }
    public QiChe(String pinpai,String cheming, double jiage){
        this(pinpai);
        this.CheMing=cheming;
        this.JiaGe=jiage;
    }

}
在子类的构造函数中第一行必须用super()给父类构造传递参数,调用父类构造。
public Bmw(String pinpai, String cheming, double jiage) { super(pinpai, cheming, jiage); }

方法的重写

子类可以对父类的成员进行扩展,还可以进行重写。

子类的方法与父类的方法重名了,默认情况下子类的方法重写覆盖父类的方法。如果要显式调用父类的成员,需要使用super.XXXX()来调用父类的成员。

super -- 一般两种用法:用来调用父类的构造。另一种是用来用调父类被覆盖的方法。

多态:

override,overload什么区别?

override,重写。子类方法覆盖了父类的方法。

overload,重载。函数名相同,参数不同。

它两个都是实现多态的途径。重写(override)-动态多态。重载(overload)-静态多态。

多态:对象执行某个行为方法式表现出不同的形态。

多态分两种:静态多态(编译多态)通过重载来实现,动态多态(运行多态),通过重写来实现。

动态多态一般通过父类的引用,指向子类的实例来实现。实例调用的时候,调的是子类的方法。例如:车是父类其中有奥迪,宝马两个子类,我可以通过动态多态的方式来进行运行,这样就使得代码更加灵活简便

汽车父类
package com.inba.maya.che;

public class QiChe {
    protected String PinPai;
    protected String CheMing;
    protected double JiaGe;
    
    public QiChe(String pinpai){
        this.PinPai=pinpai;
    }
    public QiChe(String pinpai,String cheming, double jiage){
        this(pinpai);
        this.CheMing=cheming;
        this.JiaGe=jiage;
    }
    
    public void shaChe(){
        
    }
    public void jiaSu(){
        
    }
}
子类BMW
package com.inba.maya.che;

public class Bmw extends QiChe {

    public Bmw(String pinpai, String cheming, double jiage) {
        super(pinpai, cheming, jiage);
        
    }
    public void shaChe(){
        System.out.println(JiaGe+"万的"+PinPai+CheMing+"正在紧急刹车。。。。。。");
    }
    public void jiaSu(){
        System.out.println(JiaGe+"万的"+PinPai+CheMing+"正在加速行驶。。。。。。");
    }

}
子类奥迪
package com.inba.maya.che;

public class AuDi extends QiChe {

    public AuDi(String pinpai, String cheming, double jiage) {
        super(pinpai, cheming, jiage);
        
    }
    public void shaChe(){
        System.out.println(JiaGe+"万的"+PinPai+CheMing+"正在紧急刹车。。。。。。");
    }
    public void jiaSu(){
        System.out.println(JiaGe+"万的"+PinPai+CheMing+"正在加速行驶。。。。。。");
    }
    
}
主函数
package com.inba.maya.ceshi;

import com.inba.maya.che.*;

public class Text {

    public static void main2(String[] args){
        QiChe a=new AuDi("奥迪","Q7",70);
        QiChe b=new Bmw("宝马","X6",80);
        a.jiaSu();
        a.shaChe();
        b.jiaSu();
        b.shaChe();
        SiJi sj=new SiJi();
        sj.JiaShi(a);
    }
    
}
司机
package com.inba.maya.siji;

import com.inba.maya.che.QiChe;

public class SiJi {
    public void JiaShi(QiChe q){
        q.jiaSu();
        q.shaChe();
    }
}
原文地址:https://www.cnblogs.com/AnswerTheQuestion/p/6225289.html