Java初学——面向对象接口的应用

一、接口

  1.什么是接口

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

  2.为什么使用接口

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

  3.怎么使用接口

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

  4.接口与抽象类的区别

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

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

二、利用接口完成问题

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

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

    1.创建纸张接口

    

//纸张的接口
public interface Paper {
   String newline="\n";//纸张都会有换行符所以定义在接口里
   
   //写入字符的功能
   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=空行 \n
            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");//输入的文本
   }
}

 

上一篇:写paper期间的无病呻吟及吐槽


下一篇:就最近看的paper谈谈预训练语言模型发展