面向对象:继承;多态
继承:
关键词: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(); } }