Java-抽象类与接口

抽象类与接口

抽象类和接口似乎在功能上没什么区别,主要作用都是为了规范类的行为。然而,既然同时存在这两种概念,那必然有其不同之处。

抽象类

什么是抽象类?用abstract关键字修饰的类即为抽象类。其特点是不能创建类的对象,可以包含抽象方法和非抽象方法,抽象方法同样用abstract关键字修饰,且不可以有方法的实现。而衍生类中必须实现抽象方法。

上代码:
抽象类
public abstract class CoderClass { protected void normalMethod(){ System.out.println("我是抽象类的一般方法"); } //抽象方法不能具体实现 protected abstract void codeSkill(); }

衍生类
public class JavaClass extends CoderClass { //非抽象方法可重写可不重写 //抽象方法必须实现 protected void codeSkill() { System.out.println("我会用Java搬砖"); } } public class JavascriptClass extends CoderClass { //非抽象方法可重写可不重写 //抽象方法必须实现 protected void codeSkill() { System.out.println("我会用JavaScript搬砖"); } }

接口

什么是接口?接口可以看作是抽象类的延伸,接口完全禁止方法的实现,仅仅是声明方法。

上代码:
接口
public interface ISkill { public void english(); }

实现接口类
public class HrClass implements ISkill { public void english() { System.out.println("我是hr,我会英语"); } } public class CoderClass implements ISkill { public void english() { System.out.println("我是程序猿,我也会英语"); } }

二者的区别

抽象类与接口主要的区别在于使用的情景上,抽象类是同类型对象的行为抽象,接口是不同类型对象的相同行为抽象。并且对于抽象类是采取继承的方式来使用,为单继承,而对于接口来说则是可以同时接入多个接口的。

例如代码中的例子,对于程序员这一类人来说,都具备编码能力,但是程序员有因为有人是用Java,有人是用Javascript等等不同的语言编码。所以可以将程序员看作抽象类,而编码能力作为抽象方法。Java程序员,Javascript程序员为衍生类,而用Java或Javascript编码的能力作为抽象方法的实现。

再例如,对于程序员和Hr这两类人来说,双方的工作不同,但是都具备有英语能力,而双方的英语侧重点有有所不同。所以我们将英语能力抽象称为接口方法,不同类的人均可以具备此能力。

ps:以上为个人见解,如果对读者能有所帮助那真是荣幸之至。如有错误,疏漏之处欢迎批评指正,谢谢。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,806评论 18 399
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,180评论 19 139
  • 对于面向对象编程来说,抽象是它的一大特征之一。在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类。接口...
    Q南南南Q阅读 384评论 0 3
  • 小编费力收集:给你想要的面试集合 1.C++或Java中的异常处理机制的简单原理和应用。 当JAVA程序违反了JA...
    八爷君阅读 4,712评论 1 114
  • 不知不觉,mac 的磁盘被占满了 。 用命令查看 du -sh * 发现,占用最大的几个文件夹 。 14G com...
    IDO老徐阅读 7,412评论 1 2