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();
        }
    }
  • 相关阅读:
    记一次简单的SQL优化
    JAVA 根据数据库表内容生产树结构JSON数据
    Maven 整合FreeMarker使用
    JAVA FreeMarker工具类
    JAVA 分页工具类及其使用
    JAVA 日期格式工具类DateUtil.java
    JAVA 读写Excel
    简单Linux命令学习笔记
    WEB安全隐患
    metasploit 连接database相关问题
  • 原文地址:https://www.cnblogs.com/AnswerTheQuestion/p/6225289.html
Copyright © 2011-2022 走看看