多态

一.多态

    多态性是面向对象程序设计的重要部分。在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

多态小结:

           

原文地址:https://www.cnblogs.com/arxk/p/5262305.html