关于多态的学习
Posted javahuazai
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于多态的学习相关的知识,希望对你有一定的参考价值。
1.多态的形式
多态是继封装、继承之后,面向对象的第三大特性。
多态的格式:父类 变量名 = new 子类(); 或者 接口 变量名 = new 实现类();
多态的前提:(1) 要有继承或实现关系 (2)方法重写
2.多态的优点
提高代码的可扩展性,特别是将子类对象作为参数传入方法的时候。参考以下例子。
(1)定义了动物类,设置名字属性
1 public class Animal { 2 private String name; 3 4 public String getName() { 5 return name; 6 } 7 8 public void setName(String name) { 9 this.name = name; 10 } 11 }
(2)定义了猫类、狗类继承动物类
1 class Cat extends Animal { 2 3 } 4 5 class Dog extends Animal { 6 7 }
(3)定义一个测试类,定义一个以动物类为参数的eat方法,创建猫狗的对象,设置名字属性,将猫狗对象作为参数传入eat方法里。
1 public class Main { 2 public static void main(String[] args) { 3 Cat c = new Cat(); 4 c.setName("波斯猫"); 5 eat(c); 6 7 Dog d = new Dog(); 8 d.setName("阿拉斯加"); 9 eat(d); 10 } 11 12 public static void eat(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; 就会报出异常。
以上是关于关于多态的学习的主要内容,如果未能解决你的问题,请参考以下文章