当前位置 : 主页 > 编程语言 > java >

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

来源:互联网 收集:自由互联 发布时间:2022-10-26
Java的接口和抽象类到底哪个更抽象 抽象类 抽象方法是是不完整的方法,,它只是进行了声明,没有具体的方法实现逻辑,具体的实现逻辑由子类来完成。包含抽象方法的类是抽象类,

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

❤️ 感谢大家

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

  • 欢迎关注我❤️,点赞
  • 网友评论