1.什么是多态?
多态是一种面向对象的编程思想
概念:定义同一个父类型的不同引用变量,用来接收对应子类型的相关实例对象,从而通过执行方法,实现一个方法演变出不同场景的操作,称之为多态
它产生的优点如下:
便于代码之间的替换
扩充起代码来简单快捷,简化编程流程
运用多态写出的代码,运行灵活,更好的简化无效重复代码,使得代码可读性更好
2.多态使用的前提条件
多态是建立在有继承关系存在的基础上的
3.多态的代码实现
使用一个父类类型的变量来引用一个子类类型的对象,根据被引用子类对象特征的不同,得到不同的运行结果。
//定义动物类接口
public interface Animal {
void shout();
}
/**
* 定义小狗类实现动物类的shout方法
* @author asus
*
*/
class Dog implements Animal {
@Override
public void shout() {
System.out.println("小狗汪汪叫~.~");
}
}
/**
* 定义小狗类实现动物类的shout方法
* @author asus
*
*/
class Dog implements Animal {
@Override
public void shout() {
System.out.println("小狗汪汪叫~.~");
}
}
/*
* 定义一个测试类
* 一键运行,搞定多态
*/
public class Test {
public static void main(String[] args) {
//定义Animal的变量animal1 用来接受Dog类的实例对象
Animal animal1 = new Dog();
//定义Animal的变量animal2 用来接受Cat类的实例对象
Animal animal2 = new Cat();
//分别传入参数animal1和animal2,运行,见证奇迹吧
AnimalShout(animal1);
AnimalShout(animal2);
System.out.println("很简单吧,多态 is just so so");
}
//定义静态的动物叫声方法AnimalShout(动物声音识别器)
public static void AnimalShout(Animal animal){
//根据传入的参数去选择调用对应的类型shout的方法
animal.shout();
}
}
运行一下,你就知道啦!!!
4.多态涉及的类型转换
向上转型:子类型转换成父类型
特点:
父类声明指向子类对象
调用的是子类重写父类的方法
不能调用子类特有的方法(不通过继承而新增的方法)
向下转型:父类型转换为子类型
特点:
多个子类型对象可赋值给同一个父类型变量,但同一个子类型变量只能接收对应子类型的父类实例
如果类型转换错误,会抛异常,因此向下转型之前,通常需要先做一次类型判断
类型判断
对象 (或者对象引用变量)instanceof 类(或接口)
codeing.....
//定义静态的动物叫声方法AnimalShout(动物声音识别器)
public static void AnimalShout(Animal animal){
//Animal类型的animal向下转型为Cat类型并赋值给cat
if(animal instanceof Cat){
Cat cat = (Cat)animal;
//根据传入的参数去选择调用对应的类型shout的方法
animal.shout();
}
}
笨鸟先飞,捷足先登,就算别人不相信你,你也要相信你自己!