多态 接口

大纲:

一.定义:

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

定义接口基本语法:

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

{

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

[public][abstract]方法;

}

定义接口的语法格式的参数说明:

二.接口的实现

在类中实现接口可以使用implements关键字,

基本语法格式:

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

{

}

实现借口语法格式的参数说明:

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

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

上课例题讲解:

public class Computer {
    //品牌
    private String pinpai;
    
    //CPU
    private ICPU cpu;
    
    //显卡
    private IDisplayCard displaycard;

    public String getPinpai() {
        return pinpai;
    }

    public void setPinpai(String pinpai) {
        this.pinpai = pinpai;
    }

    public ICPU getCpu() {
        return cpu;
    }

    public void setCpu(ICPU cpu) {
        this.cpu = cpu;
    }

    public IDisplayCard getDisplaycard() {
        return displaycard;
    }

    public void setDisplaycard(IDisplayCard displaycard) {
        this.displaycard = displaycard;
    }
    //运行
    public void run()
    {   //cpu
        this.cpu.command();
        //显卡
        this.displaycard.display();
        System.out.println("我组装的电脑"+pinpai+"开始运行");
    }
    public Computer(String pinpai) {
        super();
        this.pinpai = pinpai;
    }
    
    public static void main(String[]args)
    {
        
        Computer c1=new Computer("hp");
        
        //第一种方法
        AMD a1=new AMD();
        c1.setCpu(a1);
        //匿名类 newAMD()
        c1.setCpu(new AMD());
        
        c1.setDisplaycard(new Nivdia());
        
        c1.run();
        
        
        System.out.println();
        Computer c2=new Computer("华硕");
        c2.setCpu(new Intel2());
        c2.setDisplaycard(new Ati());
        c2.run();
        
        
        System.out.println();
        AMD2 a2=new AMD2();
        Computer c3=new Computer("acer");
        c3.setCpu(a2);
        c3.setDisplaycard(a2);
        c3.run();
        
        System.out.println();
        AMD3 a3=new AMD3();
        Computer c4=new Computer("acer");
        c4.setCpu(a3);
        c4.setDisplaycard(a3);
        c4.run();
    }
    
}


输出:我是AMD的CPU
我是N显卡
我组装的电脑hp开始运行

我是A显卡
我组装的电脑华硕开始运行

AMD的带显卡的CPU
AMD的CPU集成显卡
我组装的电脑acer开始运行

我是AMD的CPU
继承了AMD的一代CPU,增加了显卡功能
我组装的电脑acer开始运行
computer
                   //实现
public class AMD implements ICPU {

    @Override
    public void command() {
        // TODO 自动生成的方法存根

        System.out.println("我是AMD的CPU");
    }

    @Override
    public void display() {
        // TODO 自动生成的方法存根
        
    }

}
AMD
public class AMD2 implements ICPU, IDisplayCard {

    @Override
    public void display() {

    System.out.println("AMD的CPU集成显卡");

    }

    @Override
    public void command() {

        
    System.out.println("AMD的带显卡的CPU");
    }

}
AMD2
public class AMD3 extends AMD implements IDisplayCard {

    @Override
    public void display() {


    System.out.println("继承了AMD的一代CPU,增加了显卡功能");

    }

}
AMD3
public class Ati implements IDisplayCard {

    @Override
    public void display() {
        // TODO 自动生成的方法存根

        System.out.println("我是A显卡");
    }

}
ATI显卡
//显卡接口
public interface IDisplayCard {

    //显示
    public void display();
}
IDisplayCard
//CPU接口
public interface ICPU {

    //控制
    public void command();

    void display();
}
CPU接口
public interface ICPU2 extends ICPU {

    public void display();
}
CPU2
public class Intel implements ICPU {

    @Override
    public void command() {
        // TODO 自动生成的方法存根

        System.out.println("我是Intel的CPU");
    }

    @Override
    public void display() {
        // TODO 自动生成的方法存根
        
    }

}
Intel
public class Intel2 implements IDisplayCard, ICPU2 {

    @Override
    public void command() {
        // TODO 自动生成的方法存根

    }

    @Override
    public void display() {
        // TODO 自动生成的方法存根

    }

}
Intel2
public interface IJieKou {

    //内部只写属性方法成员名
    
    
    public void fangfa1();//接口不需要写{}
    
    public int fangfa2();
    
    public String fangfa3(int i);
    
    public void fangfa4(int w);
    
    
    
}
IJieKou
public class Nivdia implements IDisplayCard {

    @Override
    public void display() {
        // TODO 自动生成的方法存根
    System.out.println("我是N显卡");
    }

}
Nivdia显卡

 

posted on 2016-03-10 20:41  一全  阅读(235)  评论(0编辑  收藏  举报

导航