码迷,mamicode.com
首页 > 其他好文 > 详细

关于多态的学习

时间:2020-07-27 09:28:50      阅读:70      评论:0      收藏:0      [点我收藏+]

标签:运行   span   get   com   否则   http   重写   方法重写   面向对象   

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;   就会报出异常。

    

  

 

关于多态的学习

标签:运行   span   get   com   否则   http   重写   方法重写   面向对象   

原文地址:https://www.cnblogs.com/javahuazai/p/13383008.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!