JAVA学习【知】多态

来源:互联网 发布:java搭建博客系统 编辑:程序博客网 时间:2024/05/16 08:29

多态的定义
我们采用渐进的方法来一步一步了解多态。
一 课本上的定义。
多态是在程序运行期间判断所引用对象的实际类型,根据实际的类型调用其相应的方法。
多态也称动态绑定。

本人在学习多态时刚开始有些迷茫不知道从何下手,虽然知道了多态的定义但还是不知道如何去用,后来看到了马士兵老师的教程中提到了多态的重要三条规则后,对多态有了初的认识 这三条规则分别是
1.要有继承,子类继承父类。
2.要有重写,子类要重写父类的方法。
3.父类引用指向子类对象。

通过以上三条基本可以确定一个多态。

二 JAVA学习人员对多态的理解:

当我们对初态有了初的了解后相信还是有很多人对此不太懂,那么我们继续进一步说明,以下是一些CSDN网友的回答:
(1)多态可以让我们不用关心某个对象到底是什么具体类型,就可以使用该对象的某些方法,这就是多态的好处。
向上转型属于多态的一种,下面就是向上转型。
假设你现在的程序是这样的:
List list = f1();  //这个f1()是你的同事写的一个程序,返回参数类型是ArrayList
list.get(2);
list.iterator();
....
list这个引用用了很多地方了.

然后有一天,你的同事跟你说,不行啊,我这个f1()的方法返回参数类型一定要改为LinkList!!!
那么,你将不用改任何的代码,然后轻松自在地喝着红茶跟你的同事说,没关系,你改吧.

但如果你开始的时候是这样写:
ArrayList list = f1();


(2)JAVA最重要的一条就是“一切对接口编程,不要对具体对象编程”。
对接口编程的基本就是多态,使用多态程序扩展性好,便于维护,代码重用率高。

 


(3) 多态通过分离做什么和怎么做,从另一角度将接口和实现分离开来。多态不但能够该三代码的组织机构和可读性,还能够创建可扩展的程序-即无论在项目最初创建时还是在需要加新功能时都可以“生长”的程序。用多态最主要的目的还是为了以后的扩展更加灵活,可以参考Java编程思想第8章对多态的解释

 

三.现在你是否又对多态有了新的认识呢?柳暗花明又一村 接着我们趁热打铁 举两个例子继续探讨多态

 

 

  1. java 代码 
  2. class Computer{    
  3.         
  4.     public void turnOn(){    
  5.       }    
  6. }    
  7. 现在有了电脑这个类,那么个人PC,笔记本都是继承他。 
  8. java 代码 
  9. class PC extends Computer{    
  10.     public void turnOn(){    
  11.           System.out.println("PC has turn on");    
  12.       }    
  13. }    
  14.     
  15. class NB extends Computer{    
  16.     public void turnOn(){    
  17.           System.out.println("NB has turn on");    
  18.       }    
  19. }    
  20. 我们看到,每个类都有一个 turnOn()方法,而在父类中这个方法是空的,子类中各自有不同的实现,到这里可能还不太明显。如果有另外一个方法,要接受这些类作为参数,就像这样 
  21. java 代码 
  22. class Test{    
  23.     public void go(Computer computer){    
  24.           computer.turnOn();    
  25.       }    
  26. }    
  27. 这个方法接收的是基类参数,当然我们是可以把子类传递给方法的,也应该这么做。 
  28. java 代码 
  29. go(new PC());    
  30. go(new NB());    
  31. 这样他就会去调用具体子类的turnOn()方法,所以这两次调用的输出是不一样的.如果不用基类作为参数,我们想调用每个子类的turnOn()方法,那么就要些两个方法体一样的go()而接收不同的参数的重载。 
  32. java 代码 
  33. public void go(PC computer){        
  34.           computer.turnOn();        
  35.       }      
  36.     
  37. public void go(NB computer){        
  38.           computer.turnOn();        
  39.       }      
  40. 这样些也是正确的,但是这样会产生很多重复代码,而且也不易维护,当然这只是多态中最基本的一个部分,Java多态机制还有很多特性,关于这些建议大家看看 java编程思想(think in java)这本书,里面讲的很详细,这里只是很简单的描述了一下,还望个各位高手不要见笑。 
  41. class Shape{
  42.     void style(){
  43.         
  44.     }
  45. }
  46. class Circle extends Shape{
  47.     void style(){
  48.         System.out.println("Circle's Style");
  49.     }
  50. }
  51. class Square extends Shape{
  52.     void style(){
  53.         System.out.println("Square's Style");
  54.     }
  55. }
  56. class Person{
  57.     private String name;
  58.      Person(String name,Shape i){
  59.          i.style();
  60.      }
  61. }
  62. public class TestShape {
  63. public static void main(String[] args) {
  64.     Circle c = new Circle();
  65.     Square s = new Square();
  66.     Person p1 = new Person("name1",c);//c传给了shape i
  67.     Person p2 = new Person("name2",s);  s传给了shape i
  68.     
  69.     
  70.     
  71.     
  72.     }
  73. }

 

以上就是对多态的概述,不过这只是对多态的基础认识,要想更好的了解多态应该找些大型的程序去看,多态其实还包括很多更深层的东西,现在我们只需要对多态初步了解,以后我们会进一步讨论多态,因为多态是面向对象语言的特色。

     

    原创粉丝点击