多态的概述
多态:多种形态。
多态是允许你将父对象(父类引用)设置成为一个或更多的它的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。
通俗点记忆: 一切使用父类引用的地方都可以传入其子类对象,执行时会根据不同的子类对象而执行不同的操作(行为/方法)。
多态的使用
它的使用应该在满足:继承、方法重写。
父类的引用作为方法形参
public void 方法名(父类 参数名) { }
调用该方法时,可以传入所有该父类的子类对象。
在多态的使用下,通过父类的引用调用方法,最终会根据当前实际的子类对象,执行对应子类的重写后的方法。
父类的引用作为方法返回值类型
public 父类 方法名(用于选择不同对象的参数) { // 通过判断参数,可以明确返回哪一个子类对象 return 子类对象; }
调用该方法,可以返回该父类的子类对象。
类型转换
强制类型转换和自动类型转换。
// 自动类型转换 // int num = 10; double num = 10;
// 强制类型转换(风险:损失精度) int num = (int) 10.5;
向上转型
// Cat cat = new Cat(); Pet pet = new Cat();
向下转型
在父类引用无法拿到子类对象的特有信息时(方法、属性),可以对其进行向下转型。
Pet pet = new Cat(); // 向下转型(风险:类型转换错误) Cat cat = (Cat) pet;
为了防止向下转型出现类型转换错误的问题,Java 提供了 instanceof 关键词,用于判断对象是否属于指定类型。
instance:实例/对象 of:...的
// 这个对象是不是这个类型的实例呢? boolean xx = 对象名 instanceof 类型名;