多态
为什么使用多态
▪ 狗狗类
– 增加狗狗吃东西的方法
▪ 企鹅类
– 增加企鹅吃东西的方法
▪ 创建主人类
– 编写给狗狗喂东西的方法
– 编写给企鹅喂东西的方法
▪ 编写测试方法
– 调用主人类给狗狗喂的方法
– 调用主人类给企鹅喂的方法
什么是多态
如何实现多态
使用父类作为方法形参实现多态
父类到子类的转换
向下转型(强制类型转换)
instanceof运算符
对象 instanceof 类或接口
instanceof通常和强制类型转换结合使用
小结
类型转换
向上转型——子类转换为父类,自动进行类型转换
向下转型——父类转换为子类,结合instanceof运算符进行强制类型转换
实现多态的两种方式
使用父类作为方法形参实现多态
使用父类作为方法返回值实现多态
使用多态的好处?
多态可以减少类中代码量,可以提高代码的可扩展性和可维护性
引用变量的两种类型:
编译时类型(模糊一点,一般是一个父类)
由声明时的类型决定。
运行时类型(运行时,具体是哪个子类就是哪个子类)
由实际对应的对象类型决定。
多态的存在要有3个必要条件:
要有继承,要有方法重写,父类引用指向子类对象
多态 polymorphism
多态性是OOP中的一个重要特性,主要是用来实现动态联编的,换句话说,就是程序的最终状态只有在执行过程中才
被决定而非在编译期间就决定了。这对于大型系统来说能提高系统的灵活性和扩展性。
java中如何实现多态?使用多态的好处?
引用变量的两种类型:
编译时类型(模糊一点,一般是一个父类)
由声明时的类型决定。
运行时类型(运行时,具体是哪个子类就是哪个子类)
由实际对应的对象类型决定。
多态的存在要有3个必要条件:
要有继承,要有方法重写,父类引用指向子类对象
多态示例代码
package object;
public class TestPolym {
public static void main(String[] args) {
Animal animal = new Dog();
System.out.println(animal.age);
animalCry(new Dog());
animalCry(new Cat());
Dog dog = (Dog) animal;
dog.gnawBone();
System.out.println(dog instanceof Animal);
System.out.println(animal instanceof Cat);
System.out.println(animal instanceof Dog);
}
static void animalCry(Animal a){
a.shout();
}
}
class Animal {
int age=10;
public void shout(){
System.out.println("叫了一声!");
}
}
class Dog extends Animal {
int age=28;
public void shout() {
System.out.println("旺旺旺!");
}
public void gnawBone(){
System.out.println(“我在啃骨头");
}
}
class Cat extends Animal {
int age=18;
public void shout() {
System.out.println("喵喵喵喵!");
}
}
引用数据类型的类型转换
▪ 子类转换为父类:自动转换
– 上转型对象丌能操作子类新增的成员变量和方法。
– 上转型对象可以操作子类继承或重写的成员变量和方法
– 如果子类重写了父类的某个方法,上转型对象调用该方法时,是调用的重写方法。
▪ 父类转换为子类:强制转换
– (绝不是做手术,而是父类的真面目就是一个子类,否则会出现类型转换错误)