Java中接口与抽象类哪个抽象度更高?

2026-05-27 20:411阅读0评论SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计944个文字,预计阅读时间需要4分钟。

Java中接口与抽象类哪个抽象度更高?

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

Java中接口与抽象类哪个抽象度更高?

❤️ 感谢大家

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

  • 欢迎关注我❤️,点赞
  • 本文共计944个文字,预计阅读时间需要4分钟。

    Java中接口与抽象类哪个抽象度更高?

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

    Java中接口与抽象类哪个抽象度更高?

    ❤️ 感谢大家

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

  • 欢迎关注我❤️,点赞