zoukankan      html  css  js  c++  java
  • 多态

    一.多态

        多态性是面向对象程序设计的重要部分。在Java语言中,通常使用方法的重载和重写实现类的多态性。

    二.接口

        Java语言只支持单重继承,不支持多继承,即一个类只能有一个父类。但在实际应用中,又经常需要使用多继承来解决问题。为了解决该问题,Java语言提供了接口来实现类的多重继承功能。

        1.接口的定义

           使用interface来定义一个接口。接口定义与类的定义类似,也是分为接口的声明和接口体,其中接口体由变量定义和方法定义两部分组成。

           定义接口的基本语法格式为:

                                              [修饰符]interface  接口名  [extends  父接口名列表]

                                               {

                                                     [public][static][final]变量;

                                                     [public][abstract]方法;

                                               }

          注意:Java的类文件一样,接口文件的文件名必须与接口名相同。

        2.接口的实现

           接口在定义后,就可以在类中实现该接口。在类中实现接口可以使用implements关键字。

           基本语法格式为:

                                [修饰符] class<类名>[extends 父类名][implements  接口列表]

                                {

                                 }

           

         在类中实现接口时,方法名、返回值类型、参数的个数及类型必须与接口中的完全一致,并且必须实现接口中的所有方法。

         在类的继承中,只能做单重继承,而实现接口时,一次则可以实现多个接口,每个接口间使用逗号“,”分隔,这时就可能出现变量或方法名冲突的情况。解决该问题时,如果变量冲突,则需要明确指定变量的接口,可以通过“接口名.变量”实现。如果出现方法冲突,则只要实现一个方法即可。

    组装电脑的接口实例:

      1 package org.hanqi.pn0120;
      2 
      3 //电脑
      4 public class Computer {
      5     
      6     //品牌
      7     private String pinpai;
      8     
      9     //CPU
     10     private ICPU cpu;
     11     
     12     //显卡
     13     private IDisplayCard displaycard;
     14     
     15     
     16     public String getPinpai() {
     17         return pinpai;
     18     }
     19 
     20     public void setPinpai(String pinpai) {
     21         this.pinpai = pinpai;
     22     }
     23 
     24     public ICPU getCpu() {
     25         return cpu;
     26     }
     27 
     28     public void setCpu(ICPU cpu) {
     29         this.cpu = cpu;
     30     }
     31 
     32     public IDisplayCard getDisplaycard() {
     33         return displaycard;
     34     }
     35 
     36     public void setDisplaycard(IDisplayCard displaycard) {
     37         this.displaycard = displaycard;
     38     }
     39     
     40     //运行
     41     public void run()
     42     {
     43         //cpu
     44         this.cpu.command();
     45         //显卡
     46         this.displaycard.display();
     47         
     48         System.out.println("我组装的"+pinpai+"电脑开始运行");
     49     }
     50 
     51     
     52     public Computer(String pinpai) {
     53         super();
     54         this.pinpai = pinpai;
     55     }
     56     
     57     
     58     
     59     
     60     
     61 
     62     public static void main(String[] args)
     63     {
     64         
     65         //组装电脑
     66         Computer  c1=new Computer("hp");
     67         
     68         //第一种
     69         AMD a1=new AMD();
     70         
     71         //第二种 匿名类  new AMD()
     72         c1.setCpu(a1);
     73         
     74         c1.setDisplaycard(new Ati());
     75         
     76         c1.run();
     77         
     78         
     79         Computer  c2=new Computer("华硕");
     80         
     81         c2.setCpu(new Intel());
     82         
     83         c2.setDisplaycard(new Nivdia());
     84         
     85         c2.run();
     86         
     87     
     88         //
     89         AMD2 a2=new AMD2();
     90         
     91         Computer  c3=new Computer("acer");
     92         
     93         c3.setCpu(a2);
     94         
     95         c3.setDisplaycard(a2);
     96         
     97         c3.run();
     98         
     99         System.out.println();
    100         
    101         AMD3 a3=new AMD3();
    102         
    103         Computer  c4=new Computer("acer");
    104         
    105         c4.setCpu(a3);
    106         
    107         c4.setDisplaycard(a3);
    108         
    109         c4.run();
    110         
    111     }
    112 
    113 
    114 }
    Computer
    1 package org.hanqi.pn0120;
    2 
    3 //CPU接口
    4 public interface ICPU {
    5     
    6     //控制
    7     public void command();
    8 
    9 }
    ICPU
    1 package org.hanqi.pn0120;
    2 
    3 public interface IDisplayCard {
    4 
    5     //显示
    6     public void display();
    7 }
    IDisplayCard
     1 package org.hanqi.pn0120;
     2 
     3 public class Intel implements ICPU {
     4 
     5     @Override
     6     public void command() {
     7 
     8 
     9         System.out.println("我是Intel的CPU");
    10 
    11     }
    12 
    13 }
    Intel
     1 package org.hanqi.pn0120;
     2 
     3 public class AMD implements ICPU {
     4 
     5     @Override
     6     public void command() {
     7         
     8         System.out.println("我是AMD的CPU");
     9 
    10         
    11     }
    12 
    13 }
    AMD
     1 package org.hanqi.pn0120;
     2 
     3 public class Nivdia implements IDisplayCard {
     4 
     5     @Override
     6     public void display() {
     7 
     8 
     9         System.out.println("我是N卡");
    10 
    11     }
    12 
    13 }
    Nivdia
     1 package org.hanqi.pn0120;
     2 
     3 public class Ati implements IDisplayCard {
     4 
     5     @Override
     6     public void display() {
     7 
     8 
     9         System.out.println("我是A卡");
    10     }
    11 
    12 }
    Ati
    1 package org.hanqi.pn0120;
    2 
    3 public interface ICPU2 extends ICPU,IDisplayCard {
    4 
    5     
    6     public void display();
    7 }
    ICPU2
     1 package org.hanqi.pn0120;
     2 
     3 public class AMD2 implements ICPU, IDisplayCard {
     4 
     5     @Override
     6     public void display() {
     7 
     8 
     9         System.out.println("AMD的CPU显卡");
    10     }
    11 
    12     @Override
    13     public void command() {
    14 
    15 
    16         System.out.println("AMD的自带显卡的CPU");
    17 
    18     }
    19 
    20 }
    AMD2
     1 package org.hanqi.pn0120;
     2 
     3 public class Intel2 implements ICPU2 {
     4 
     5     @Override
     6     public void command() {
     7 
     8 
     9         
    10     }
    11 
    12     @Override
    13     public void display() {
    14 
    15 
    16         
    17 
    18     }
    19 
    20 }
    Intel2
     1 package org.hanqi.pn0120;
     2 
     3 public class AMD3 extends AMD implements IDisplayCard {
     4 
     5     @Override
     6     public void display() {
     7 
     8 
     9         System.out.println("继承了AMD的一代CPU,增加了显卡功能");
    10     }
    11 
    12 }
    AMD3

    多态小结:

               

  • 相关阅读:
    Silverlight 4 新特性之NotificationWindow
    如何理解JavaScript原型
    惹恼程序员的十件事
    浅谈HTTP中Get与Post的区别
    asp中Access与Sql Server数据库区别总结
    SQL208语句
    jQuery源码分析
    3. 在 as 和 强制类型转换之间,优先使用 as 操作符。
    揭秘10项必学的.NET技术
    如何设置远程访问SQL Server2005
  • 原文地址:https://www.cnblogs.com/arxk/p/5262305.html
Copyright © 2011-2022 走看看