目录
1.多态的优势
2.多态的弊端是什么?
3.引用数据类型的类型,转换有几种方式
4.强制类型转换能解决什么问题楠?
方法中,使用父类作为参数,可以接收所有子类的对象
package ploydemo3;import java.util.ArrayList;public class Test {public static void main(String[] args) {//ArrayList list = new ArrayList<>();//只能添加String类型的 泛型ArrayList list = new ArrayList<>();//任意数据添加list.add(4444);list.add("aaaa");System.out.println(list);}
}
不能使用子类的特有功能
package ploydemo3;public class Test2 {public static void main(String[] args) {Animal a =new Dog();//编译看左边,运行看右边a.eat();//多态的弊端//不能调用子类特有的功能//为什么报错//当调用成员方法的时候,编译看左边,运行看右边//那么在编译的时候会先检查左边的父类有没有这个方法,如果没有直接报错a.lookHome();//不能调用子类对象//解决方案//变回子类类型就可以了//细节:转回的时候不能瞎转,如果转或其他类的类型,就会报错// int b=9;
// byte c=(byte)b;
// Dog d= (Dog) a;
// d.lookHome();}
}class Animal{public void eat(){System.out.println("动物在吃东西");}
}class Dog extends Animal{@Overridepublic void eat() {System.out.println("狗吃骨头");}public void lookHome(){System.out.println("狗看家");}
}class Cat extends Animal{@Overridepublic void eat() {System.out.println("猫吃小鱼干 ");}public void CatchMouse(){System.out.println("猫抓老鼠");}
}
1.自动类型转换
Person p=new Student;
2.强转类型转换
Student s=(Student)p;
可以转换成真正的子类类型,从而调用子类独有的功能。
if(a instanceof Dog){Dog c=(Dog)a;c.lookHome();}else if(a instanceof Cat){Cat c=(Cat)a;c.CatchMouse();}else {System.out.println("没有这个类型,午饭转换");}
转换类型与真实对象类型不一致会报错
转换的时候用instanceof关键字进行判断