Java–多态详解–第十天
多态
什么是多态?
多态就是同一种事物在不同时刻表现出不同的状态。
多态存在的三个必要要求:
1.要有继承(包含接口的实现)(前提条件)
因为只有继承父类才可以表示子类
2.要有方法重写(前提条件)
因为在顶层父类中会定义一些抽象方法(没有实现的方法),需要子类继承后重写父类中的抽象方法。
3.父类引用指向子类对象(多态的表现)
例如:Animal x = new Cat();
示例1:猫继承动物;
//定义一个Animal类
class Animal{
void show() {
System.out.println(“Anmial");
}
}
//定义一个Cat类继承Animal类
class Cat extends Animal{
void show() {
System.out.println(“Anmial");
}
}
//验证:
//在main()方法中:
Animal x = new Cat();
//这里调用的是Cat类中的方法show();
x.show();
运行时的规则:编译看左边,运行看右边
(如上例,开始编译时是Animal类开始的,但在运行使用该对象时调用的是Cat类中的方法与属性)
示例2:
//定义一个Animal类
class Animal{
static void show() {
String name;
System.out.println(“Animal");
}
}
//定义一个Cat类继承Animal类
class Cat extends Animal {
String name;
static void show() {
System.out.println(“Cat");
}
}
//验证:
//在main()方法中:
Animal x = new Cat()
//调用的是动物Animal类中的成员变量
x.name = "gugu";
//调用的是动物Animal类中的静态成员方法
x.show()
运行时的规则:编译看左边,运行也看左边
(如上例,开始编译时是Animal类开始的,运行使用x对象时调用的Animal类中的方法与属性)
多态的优点:提高了程序的简便性和可扩展性。
多态有两种体现方法:
1.向上转型:将子类类型转换为父类类型
例如:Animal x = new Cat();
产生了一个问题:父类类型不能访问子类特有的方法和属性
故有解决方法:向下转型
2.向下转型:将父类类型转换为子类类型(强制转换)
例如:Animal x = new Cat();
Dog dog = (Dog) x ;//Dog也继承了Animal类
此时dog对象就可以调用Dog类中特有的属性和方法
实例3:
public static void main(String[] args) {
Animal animal = new Dog();//向上转型
if(animal instanceof Dog){
Dog dog = (Dog) animal; //向下转型
dog.play();
}
//对 instanceof 的检测
String s = "abc";
Object obj = s;//Object实际包含的是字符串
if(obj instanceof Dog){ // 大类型 instanceof 小类型 判断检测大类型中是否包含的是具体的小类型
Dog d = (Dog) obj;
}else{
System.out.println("不是dog类型");
}
}
关键字: instanceof
使用方法: 大类型 instanceof 小类型 返回true或false
用途:
判断检测大类型中是否包含的是具体的小类型。