首页 > 编程语言 >Java的接口和抽象类到底哪个更抽象

Java的接口和抽象类到底哪个更抽象

时间:2022-10-22 15:01:55浏览次数:49  
标签:Java Scanner 实现 Readable 接口 抽象类 public

Java的接口和抽象类到底哪个更抽象

抽象类

抽象方法是是不完整的方法,,它只是进行了声明,没有具体的方法实现逻辑,具体的实现逻辑由子类来完成。包含抽象方法的类是抽象类,通过abstract关键字来修饰

抽象方法:

abstract void function();

接口

接口相比抽象类,可以说它比抽象类更加抽象,抽象类可能还有具体的实现方法,而接口没有任何的具体实现方法,它只定义方法的参数类型,方法名和返回类型。接口的所有的方法都是public类型的,否则编译器会报错。

接口与接口可以存在继承关系,从而实现接口的组合。

接口与设计模式

接口的高度抽象让它在设计模式中得到了发挥。策略模式经常会用到接口。以Scanner为例子,我们都知道,它是一个输入内容的类,我们看一下它的构造方法:

public Scanner(Readable source) {
        this(Objects.requireNonNull(source, "source"), WHITESPACE_PATTERN);
    }

构造方法的一个参数是Readable,Readable是一个接口,只要我们实现这个接口,就可以自定义输入的内容,

比如我们定义了一个类XppWords:

public class XppWords implements Readable {
  
   
  public int read(CharBuffer cb) {

    return 66; 
  }

只要实现Readable接口,并重写read()方法皆可以。

在使用这个类的时候:

  public static void main(String[] args) {
    Scanner s = new Scanner(new XppWords());
    while(s.hasNext())
      System.out.println(s.next());
  }

通过调用Scanner的构造方法创建对象,参数传的是Readable接口的实现类实例就可以输入内容,这就是接口的好处。

如果我们定义的类无法实现这个接口呢?还有一个办法是使用适配器模式,通过一个被适配来进行过渡。

适配器模式通常三个角色,一个是源角色,也就是系统中已经存在的,但与所需接口不匹配,一个是目标角色,也就是我们的Readable接口,这是我们需要的,还有一个就是适配器角色,通过它来转换过渡。

需要适配的类,也就是源角色:

public class Xpp {
    public int next() { return 66; }

    
  }

适配器类:

public class XppAdapter extends Xpp implements Readable {
  
  public int read(CharBuffer cb) {
    return next();
  }  
  
}

它是Xpp的子类又是Readable的实现类,

使用:

public static void main(String[] args) {
    Scanner s = new Scanner(new XppAdapter());
    while(s.hasNextDouble())
      System.out.print(s.nextDouble() + " ");
  }

通过构造XppAdapter对象调用Scanner的构造方法就可以创建Scanner对象了。

总结

这篇文章我们讲了Java的接口和抽象类,抽象类可能有具体的方法实现,接口比抽象类更加抽象,它全是方法的定义,没有具体实现,具体实现需要具体类来实现接口,接口的出现在设计模式中大放异彩,我们以适配器模式为例讲了接口的使用。

❤️ 感谢大家

如果你觉得这篇内容对你挺有有帮助的话:

  1. 欢迎关注我❤️,点赞

    标签:Java,Scanner,实现,Readable,接口,抽象类,public
    From: https://blog.51cto.com/u_15460453/5785832

相关文章

  • Java不能继承多个类?内部类帮你解决这个问题
    Java不能继承多个类?内部类帮你解决这个问题内部类在Java中也是一个很重要的概念,很多类中都存在内部类。内部类与内部类的对应的是外围类,内部类可以操作外围类的所有成员,p......
  • 【Java SE】枚举类和注解
    1.枚举类的使用当类的对象由有限个,确定的时候,我们称这种类为枚举类。当需要定义一组常量时,建议使用枚举类。而当枚举类中只有一个对象时,可以使用单例模式。1.1enmu关键......
  • java线程的优先级
    packageA_ShangGuiGu.Thread.ThreadDemo;/***优先级*1.MAX_Priority-----最大优先级为10*2.MIN_Priority-----最小优先级为1*3.NORM_Priority----默认优先级5*4......
  • java基础-->注释
    注释注释:注释起到对代码标注和解释的作用,如果你去看看JDK源码,会发现他们有许多的注释,而且注释是比代码还要多的,可见为代码添加注释是非常重要的,写好注释能让别人更加容易......
  • java第六讲-StreamAndFileSourceCode
    1.PrintStream学习:Java打印流PrintStream类详解_风有点大的博客-CSDN博客_printstream类1.1向文件进行输出PrintStreamps=newPrintStream("helloworld01.txt"......
  • 力扣1235(java)-规划兼职工作(困难)
    题目:你打算利用空闲时间来做兼职工作赚些零花钱。这里有 n 份兼职工作,每份工作预计从 startTime[i] 开始到 endTime[i] 结束,报酬为 profit[i]。给你一份兼职工作......
  • 学习记录20接口
    接口为什么会有接口呢?问题的产生:上一篇学了抽象类,我们应该知道,抽象类存在的必要性,但有的时候,个别的子类中的方法不太适合提取成为共性方法,我们就会考虑在这个子类中写其......
  • 防止接口恶意刷新和暴力请求
    在实际项目使用中,必须要考虑服务的安全性,当服务部署到互联网以后,就要考虑服务被恶意请求和暴力攻击的情况,下面的教程,通过intercept和redis针对url+ip在一定时间内访问的次......
  • Java--->集合中常用的ArrayList的使用和介绍
    前段时间一直在说数组,今天说下Java集合中常用的ArrayListArrayList类是一个可以动态修改的数组,与普通数组的区别就是ArrayList没有固定大小的限制,可以添加或删除元素。Array......
  • Java并发编程学习9-并发基础Demo
    构建高效且可伸缩的结果缓存本篇我们将逐步构建一个高效且可伸缩的缓存,用于改进一个高计算开销的函数。1.HashMap+并发机制我们首先能想到的就是,通过HashMap和并发......