zoukankan      html  css  js  c++  java
  • 多态 接口

    大纲:

    一.定义:

    使用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显卡
  • 相关阅读:
    前端性能优化
    CSS实现文字在容器中对齐方式
    spring里面的context:component-scan
    Builder模式
    idea无法新建maven项目
    Java-位运算
    pg数据库数据表异常挂起
    Java-多线程与单例
    Java-数据结构之二叉树练习
    Java-JNA使用心得
  • 原文地址:https://www.cnblogs.com/panyiquan/p/5263269.html
Copyright © 2011-2022 走看看