
继承使用场景/使用原因父类成员的访问构造方法super和this的区别代码块的执行顺序访问修饰符多态方法重写的规则继承使用场景/使用原因进行共性抽取实现代码复用继承的双方为父类/基类子类关键字extends; 格式class 类名 extends 父类{}每个子类都是只有一个直接父类不支持多继承但可以使用接口在主函数中创建子类的实例引用后可以调用父类的非private成员变量和方法父类成员的访问访问成员变量条件 Stu是子类teacher是父类Stu student new Stu( );student.tName;注意如果父类和子类中有同名的变量时父子类同名成员变量属于变量隐藏子类调用时优先使用自身的成员若没有就调用父类的否则就会编译报错当子类对象访问 父类和子类同名方法时若父类和子类同名方法的参数列表不同重载根据调用方法适 传递的参数选择合适的方法访问如果没有就报错同名的实例方法优先执行子类重写后的方法思考继承后同名成员会调用子类的如果想调用父类的的同名成员应该如何操作使用super关键字用法super.成员变量tip: 只能在非静态方法中使用因为静态方法不依赖于对象构造方法格式public 类名{}⭐子类对象构造时要先触发基类构造方法再执行子类的构造方法并将子类自己新增加的成员初始化完整构造方法和当前的类名相同可以有参数在子类构造方法中第一行默认隐式调用super 如果类内没有自定义构造方法时编译器会给出一个 不含参数的构造函数super和this的区别thissuper调用位置构造方法的第一行构造方法的第一行指代当前对象/调用实例方法的对象引用父类的成员相同点只能在类的非静态方法使用用来访问非静态成员方法和字段代码块的执行顺序调用两个实例对象时父类静态代码块--子类静态代码块--父类实例代码块---父类构造方法--子类实例代码块--子类构造方法tip一个静态代码块只执行一次访问修饰符public protected defaultprivate不同包的非子类--不同包的 子类--相同包的不同类--相同包的相同类/当前类final关键字修饰变量表示常量不能修改修饰类表示此类不能被继承继承和组合继承是 is-a组合是 has -a/a part of多态概念同一行为不同对象有不同实现使用父类 引用指向子类对象调用重写实例方法时发生动态绑定。条件:子类继承了父类子类重写了父类的方法 且内容不同通过父类的引用调用重写的方法父类类型的引用变量指向子类对象发生向上转型调用被子类重写过的那个方法 → 实际跑的是子类重写后的方法方法重写的规则重写的 方法名 和 参数列表不能改变返回值类型可以不同但要有父子关系方法内容不同访问权限不能比父类中被重写的方法的访问权限更低父类被static、private修饰的方法、构造方法都不能被重写向上转型将子类转为父类使用场景直接赋值方法传参方法返回向下转型将父类转为子类。需要进行强制类型转化。不一定能转成功instanceof关键字判断是否安全。例if(animal instanceof Cat)