1.多态的形式
多态是继封装、继承之后,面向对象的第三大特性。
多态的格式:父类 变量名 = new 子类(); 或者 接口 变量名 = new 实现类();
多态的前提:(1) 要有继承或实现关系 (2)方法重写
2.多态的优点
提高代码的可扩展性,特别是将子类对象作为参数传入方法的时候。参考以下例子。
(1)定义了动物类,设置名字属性
1 public classAnimal {2 privateString name;3
4 publicString getName() {5 returnname;6 }7
8 public voidsetName(String name) {9 this.name =name;10 }11 }
(2)定义了猫类、狗类继承动物类
1 class Cat extendsAnimal {2
3 }4
5 class Dog extendsAnimal {6
7 }
(3)定义一个测试类,定义一个以动物类为参数的eat方法,创建猫狗的对象,设置名字属性,将猫狗对象作为参数传入eat方法里。
1 public classMain {2 public static voidmain(String[] args) {3 Cat c = newCat();4 c.setName("波斯猫");5 eat(c);6
7 Dog d = newDog();8 d.setName("阿拉斯加");9 eat(d);10 }11
12 public static voideat(Animal animal) {13 System.out.println(animal.getName() + "在吃饭");14 }15
16 }
(4)优点:省去了以下的方法定义
1 //public static void eat(Cat c) {2 //System.out.println(c.getName() + "在吃饭");3 //
4 //}public static void eat(Dog d) {5 //System.out.println(d.getName() + "在吃饭");6 //}
(5)测试类的运行结果
3.多态的缺点
无法访问子类独有功能。
解决方案:向下转型后在调用子类独有功能。
向下转型(强制转换)格式:子类类型 变量名 = (子类类型) 父类变量名;
如:Aniaml a = new Cat();
Cat c =(Cat) a;
向下转型前提:转型的对象必须属于子类类型,否则报出了 ClassCastException ,类型转换异常。
如:Aniaml a = new Cat(); Dog d =(Dog) a; 就会报出异常。