zoukankan      html  css  js  c++  java
  • Java初学——面向对象接口的应用

    一、接口

      1.什么是接口

        接口是比抽象类更抽象的定义,接口不可以被实例化 实现类必须实现接口的所有方法 实现类可以实现多个接口 、多个接口使用逗号隔开 接口中的变量都是静态常量(public static final) 程序设计时面向接口的约定而不考虑具体实现 。

      2.为什么使用接口

        有些事物具有相同的功能,多个类可以做相同的功能,程序设计中,要做到将功能模块化,细分化,这样有利于代码的改写,减少代码冗余度,接口和继承类似,但是继承具有单根性,所以有了接口这个定义。

      3.怎么使用接口

        接口中的成员变量 默认都是public static final的,必须显式初始化 接口中的方法 默认都是public abstract的 ,接口没有构造方法,不能被实例化 一个接口不能实现另一个接口,但可以继承多个其他接口 一个类必须实现接口抽象方法,除非这个类也是抽象类

      4.接口与抽象类的区别

        相同点 代表系统的抽象层 都不能被实例化 都能包含抽象方法 用于描述系统提供的服务,不必提供具体实现

        不同点 在抽象类中可以为部分方法提供默认实现,而接口中只能包含抽象方法 抽象类便于复用,接口便于代码维护 一个类只能继承一个直接的父类,但可以实现多个接口

    二、利用接口完成问题

        问题:墨盒和纸张的规格是一种约定 打印机需要遵守这些约定 用面向接口编程的方式开发 制定墨盒、纸张的约定或标准 其他厂商按照墨盒、纸张的标准生产墨盒、纸张 打印机厂商使用墨盒、纸张的标准开发打印机

        分析:墨盒和纸张规格是个接口,需要创建类去分别实现纸张和墨盒的接口,创建打印机类去组装墨盒和纸张打印,最后创建测试类

        1.创建纸张接口

        

    //纸张的接口
    public interface Paper {
       String newline="
    ";//纸张都会有换行符所以定义在接口里
       
       //写入字符的功能
       void putChar(char word);
       
       //读取纸张上内容的功能
       String getContent();
    }

      2.创建墨盒的接口

    //创建墨盒接口
    public interface Ink {
        //返回指定颜色
        String getColor(int r,int g,int b);
    }

      3.实现墨盒接口

    public class ColorInk implements Ink{
    
        @Override
        public String getColor(int r, int g, int b) {
            Color color=new Color(r,g,b);//创建color对象
            return "#"+Integer.toHexString(color.getRGB()).substring(2);
        }
    }

      4.实现纸张接口

    //纸张实现类
    public class TextPaper implements Paper{
        int linewords=16;//定义一行有16个字符
        int rows=5;//一样有五行
        int x=0;
        int y=0;
        int paper=1;
        String content="";
        
        @Override
        public void putChar(char word) {
            content+=word;
            x++;//移动字符的位置
            if(x==linewords){
                content+=newline;
                x=0;
                y++;
            }
            
            if(y==rows){
                content+="=======第"+paper+"页=======";
                paper++;
                y=0;
                content+=newline+newline;
            }
        }
    
        @Override
        public String getContent() {
            //获取内容的阶段
            if(!(x==0&&y==0)){
                //页中是否存在空行 lines-y=空行 
    
                int count=rows-y;
                for(int i=0;i<count;i++){
                    content+=newline;
                }
                content+="=======第"+paper+"页=======";
            }
            return content;
        }
    
    }

    5.组装墨盒

    //打印机类组装墨盒和纸张
    public class Printer {
        
        private Ink ink; //墨盒
        private Paper paper; //纸张
    
        public void print(String content){
            System.out.println("该打印机使用的颜色是:"+ink.getColor(50, 50, 50));
            for (int i = 0; i < content.length(); i++) {
                 char c=content.charAt(i);
                 paper.putChar(c);
            }
            System.out.println(paper.getContent());
        }
    
        public Ink getInk() {
            return ink;
        }
    
        public void setInk(Ink ink) {
            this.ink = ink;
        }
    
        public Paper getPaper() {
            return paper;
        }
    
        public void setPaper(Paper paper) {
            this.paper = paper;
        }
        
        
    }

    6.创建测试类

    public class Test {
       public static void main(String[] args) {
           //准备墨盒和纸张
           Ink ink=new BlackInk();
           Paper paper=new TextPaper();
           
           Printer printer=new Printer();
           printer.setInk(ink);
           printer.setPaper(paper);
           printer.print("2222222222222222222222222222222222222222222222222222222");//输入的文本
       }
    }
  • 相关阅读:
    equals与”==”的区别
    数学--数论--积性函数(初步)
    数学--数论-多重集排列组合与母函数
    数学--数论--POJ 1061青蛙的约会 (扩展欧几里得算法)
    数学--数论--POJ281(线性同余方程)
    数学--数论--HDU1222 狼和兔子(最大公约数)
    数学--数论--HDU1576 A / B(逆元)
    VScode像Codeblocks一样,不启动调试和Debug直接运行
    数学--数论--鸽巢原理
    图论--拓扑排序--模板
  • 原文地址:https://www.cnblogs.com/wuxuewei/p/10969552.html
Copyright © 2011-2022 走看看