以下方代码为例
SonAddClass p1 = new SonAddClass(2, 3, 5); 首先调用SonAddClass类中的输入三个参数的构造方法;然后在这个构造方法中调用了父类AddClass的输入三个参数的构造方法然后在这个函数中又调用了输入两个方法的构造方法然后调用输入一个参数的构造方法然后在父类AddClass中初始化x,y,z均为0然后在AddClass函数中将x赋值为2然后在两个形参的AddClass函数中将y赋值为3然后在三个形参的AddClass构造方法中将z赋值为5然后进入子类SonAddClass中对a,b,c初始化为0令a=x+4,也就是6同样的b为7,c为9最后计算出a+b+c=22没有找到极其强烈无法辩驳的用继承的原因的时候一律用组合
-组合体现为实现层面 -继承主要体现在扩展方面 如果并不是需要一个类的所有东西(包括接口和属性),那么就不需要用继承,相反就用组合。 用继承那就必须是所有的都继承,不是所有的都继承,那么就是滥用继承。
组合在编译依赖和不同版本的运行时兼容性上优于继承;继承在合理复用实现的潜力优于组合
继承偏重集体,具有特殊性的集体(派生类)可以看作是一般性集体(基类)的一部分,如汽车对于交通工具。 组合偏重个体,某个功能对象被宿主对象看成自己的一部分,如轮子对于汽车。 与看待事物的角度有关,继承偏抽象,组合偏具体。
代码当中体现多态性,概括为一句话,父类引用指向子类对象。
//父类名称 对象名 =new 子类名称(); //接口名称 对象名=new 实现类名称(); //父类 package cn.itcast.day10.demo04; public class Fu(){ System.out.println("父类方法"); } //子类 package cn.itcast.day10.demo04; public class Zi(){ System.out.println("子类方法"); } package cn.itcast.day10.demo04; public class Demo01Multi{ public static void main(String[] args){ //使用多态的方法 //左侧父类的引用,指向了右侧子类的对象 Fu obj =new Zi(); obj.method(); } }instanceof用于判断前面的对象是否是后面的类,或者其子类、实现类的实例。就是判断一个对象的声明是否为该对象的实例引用。 如
A a=new A()那么使用instanceof时为true或者
A a=new B()然后B是A的子类那么结果为 false反过来为true