Java多态
<1>多态:
事物存在多种体现形式。
父类的引用指向了子类对象。
接口的引用指向了实现类的对象。
// 动物(Animal) 猫(Cat) 狗(Dog)
// 创建一个Cat对象
Cat cat = new Cat();
// 创建一个Dog对象
Dog dog = new Dog();
Animal a1 = new Animal();
Animal a2 = cat; //多态
Animal a3 = dog;
<2>多态的好处
提高代码的扩展性,使用多态作为参数,可以提高参数传递的灵活性。
<3>多态的前提:
必须要有关系,继承或者实现。
要有重写或者实现抽象方法。
<4>不同的对象可以访问的成员
(1)父类 对象名=new 父类();
只能访问父类中的成员
(2)子类 对象名=new 子类();
可以访问从父类继承的成员,访问重写后的方法和子类自定义的成员
(3)父类 对象名=new 子类(); //多态
可以访问父类中的成员,和子类重写的方法。不能访问子类中特有的方法和属性
<5>类型转换:(不论是向上转型还是向下转型,转的都是子类对象)
(1)向上转型:隐式转型,将子类类型隐藏。就不能访问子类中特有的方法
示例如下:
Dog dog=new Dog();
// 把狗提升成动物类型
Animal a=dog;
// a 只能访问Animal中的成员和重写后的方法,不能访问Dog类中特有的方法
(2)向下转型:强制转型,目的就是为了访问子类中特有的方法
示例如下:
//向下转型的目的就是为了a对象能够访问特有的方法
// 向下转型之前必须使用instanceof关键字判断,此对象是否属于转成的类型
Dog dog=new Dog();
// 把狗提升成动物类型
Animal a=dog;
boolean flag=a instanceof Dog;
if(flag){
Dog hsq=(Dog)a;
System.out.println(hsq);
}else{
System.out.println("不能转换");
}
// 将 obj 向下转型为String对象
Object obj=new String("abc");
if(obj instanceof String){
String s=(String)obj;
System.out.println(s);
}