zoukankan      html  css  js  c++  java
  • 面向对象:继承;多态

    继承:

    关键词: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();
        }
    }
  • 相关阅读:
    28完全背包+扩展欧几里得(包子凑数)
    HDU 3527 SPY
    POJ 3615 Cow Hurdles
    POJ 3620 Avoid The Lakes
    POJ 3036 Honeycomb Walk
    HDU 2352 Verdis Quo
    HDU 2368 Alfredo's Pizza Restaurant
    HDU 2700 Parity
    HDU 3763 CDs
    POJ 3279 Fliptile
  • 原文地址:https://www.cnblogs.com/AnswerTheQuestion/p/6225289.html
Copyright © 2011-2022 走看看