• 多态 接口


    大纲:

    一.定义:

    使用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显卡
  • 相关阅读:
    JS提取子字符串函数比较
    js事件定义方式和获取事件对象event总结
    让body的clientHeight与html的clientHeight相等的方法
    关于原型链和继承问题的思考:为什么不能直接把父类的prototype赋值给子类的prototype
    [javascript权威指南笔记02]Throw语句和异常处理机制try/catch/finally
    转载:javascript语句标签
    转:JS中强大的正则表达式
    分享我常用的Javascript工具函数
    对prototype,instanceof和constrctor的理解
    xml基础知识总结和回顾
  • 原文地址:https://www.cnblogs.com/panyiquan/p/5263269.html
Copyright © 2020-2023  润新知