💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
## 定义类型 应该将通用的方法放在基类当中.而具有特殊作用的方法放在子类当中. ## 覆盖方法 可以对父类的同名方法进行重写. ## 子类构造器 调用父类构造器必须写在子类构造器的第一行,如果没有显示的调用父类构造器,子类将自动的掉用哪个一个无参数的父类构造器.如果父类没有不带参数的构造器,而子类又没有显示的调用父类构造器,那么java编译器将会报错. ~~~ Manager boss = new Manager("jack"); Employee[] staff = new Employee[2]; staff[0] = boss; staff[1] = new Employee("milan"); for (Employee e : staff) { System.out.println(e.getName()); } ~~~ Manager 类继承自Employee, 调用能够确定应该执行哪个 getSalary 方法。 请注意, 尽管这里将 e 声明为 Employee 类型, 但实际上 e 既可以引用 Employee 类型的对象, 也可以引用 Manager 类型的对象。 当 e 引用 Employee 对象时, e.getSalary( ) 调用的是 Employee 类中的 getSalary 方法; 当 e 引用 Manager 对象时, e.getSalary( ) 调用的是 Manager 类中的 getSalary 方法。 虚拟机知道 e 实际引用的对象类型, 因此能够正确地调用相应的方法。 一个对象变量(例如, 变量 e) 可以指示多种实际类型的现象被称为多态(polymorphism)。 在运行时能够自动地选择调用哪个方法的现象称为动态绑定(dynamic binding。) ## 继承层次 一个基类可以无限的被子类继承,形成一个继承链.java只支持单继承. ## 多态 有一个用来判断是否应该设计为继承关系的简单规则,这就是"is-a" 规则,它表明子类的每个对象也是超类的对象.例如,每个经理都是雇员,因此,将Manager类设计为Employee类的子类是显而易见的,反之不然,并不是每一名雇员都是经理. "is-a"规则的另一种表述法是置换法则.它表明程序中出现超类对象的任何地方都可以用子类对象置换. ## 受保护访问 在实际使用中,避免滥用protected.尽量不要对域设置protected,而是对方法设置protected.