Java多态 指的是 同一个行为具有多个不同表现形式或形态的能力。主要包括了 继承方法法重写、同类方法重载、抽象方法、接口 这四种。
这一期主要介绍 继承方法法重写的应用。继承,就是子类继承父类的特征和行为,使得子类对象具有父类的方法和属性。子类拥有父类的非private的属性和方法,可以用自己的方式实现父类的方法法 override(重写,覆盖),实现了代码的复用,重写从父类那里继承来的方法的,当调用方法时候会优先调用子类的方法(默认就近原则)。不支持多继承,支持多重继承,多重继承提高了耦合性。
创建一个 Extends 的 package, 再分别创建 2 个 sub_package, 命名为 before & after ; 在 before package 里面,创建 Customer_A 和 Customer_B 的 类。在这 2个类里,分别创建 name 和 age 的 初始变量,和对应的 setName() 、getName() 、setAge() 、getAge() 的方法,以及 buy() 和 movement() 这些方法。
在after package 里,创建一个 Human 的类
在 after package 里,再 创建 一个 Customer_A 类,继承 Human 这个父类的。
创建 MainTest 类作为程序入口,创建after package 的 Customer_A 的对象,当 设置变量 name 时,会出现报错。
原因是刚才创建 Human 时,name 和 age 都是用 private 修饰,根据之前介绍的 4大修饰符机制,是不可以访问的,所以这时必须改为 protected 。
这里直接调用 setName() 方法
在 after package 同样创建 Customer_B 去继承父类 Human
同样创建 Customer_B 的对象并调用各自的方法。
在 after package 的 Customer_A 和 Customer_B 分别添加 在 before package 相同的 movement() 方法。
在MainTest 里 分别调用各自 movement() 的方法。
对 after package 的 Customer_A 和 Customer_B 覆写(重写) 父类 Human 的 buy() 方法。通常都会自动加上 @Override 这个标记。( 如果不加都可以,规范化上通常都要加,以便标识)。
在 after package 的 Customer_B 添加 test() 方法,其中 super 是指父类对象,tihs 是指 本类(当前)对象。这一点必须要注意区分。
在 MainTest 的 Customer_B 对象调用 test() 方法
不支持多继承,支持多重继承
创建多个 Liveing 类,添加 run() 方法。
多继承时,会报错。
多重继承就没有问题,在 Human 继承 Living
final 修饰的类,则这个类不可以被继承
final 修饰方法法,则这个方法不允许被覆盖(重写)
下一期将讲解多态的抽象方法的应用,有看不懂以上的欢迎留言。