一、多态性的概念
多态是面向对象三大特性之一
二、多态性的两种情况
1、多态性我们大概可以分为两类:
(1)方法的重载与重写
(2)对象的多态性
三、对象的多态性
对象多态性是从继承关系中的多个类而来。
1、向上转型:将子类实例转为父类实例
格式:父类 父类对象 = 子类实例;——>自动转换
以基本数据类型操作为例:int i = ‘a’;
(因为c的容量比int小,所以可以自动完成)
2、向下转型:将父类实例转为子类实例
格式:子类 子类对象 = (子类) 子类实例;强制转换
以基本数据类型操作为例:char c = (char) 97;
(因为整型是4个字节比char2个字节要大,所以需要强制完成)
四、多态性小结
1、方法的重载与重写就是方法的多态性表现
2、多个子类就是父类中的多种形态
3、父类引用可以指向子类对象,自动转换
4、子类对象指向父类引用需要强制转换(注意:类型不对会报异常)
5、在实际开发中尽量使用父类引用(更利于扩展)
/**
*
* 多态性
*
*/
public class PolymorphismDemo {
public static void main(String[] args){
//八种基本类型
//自定义类型
//父类就是大,子类就是小
Person man = new Man();//父类的引用指向子类对象
man.say();
Person women = new Women();
women.say();
//强制转换
Man m = (Man)man;
m.say();
//java.lang.ClassCastException类型 转换异常
//Man m1 = (Man)women;
//没有父子关系的两种类型不能强制装换
}
}
abstract class Person{
String name;
public void setName(String name){
this.name = name;
}
public String getName(){
return name;
}
public void say(){}//抽象方法
}
class Man extends Person{
public void say(){
System.out.println("人家可是纯爷们!");
}
}
class Women extends Person{
public void say(){
System.out.println("再不交房租,我就烧了你的铺!");
}
}