接口、抽象类和实现类

1. 接口是最抽象的一层,不需要进行任何实现;抽象层可以实现部分接口方法,也可以自定义方法;实现类必须实现所有方法。
2. 接口能被类(抽象类和具体类)实现,区别在于抽象类实现接口,可以实现该接口的方法,也可以不实现该接口的方法;具体类必须实现接口的所有方法
3. 接口可以被接口继承,但不允许被类继承
4. 类之间可以相互继承,而且只能单继承
5. abstract是抽象的意思,在java中,规定只能修饰类或者方法,所以不能修饰属性。被abstract修饰的内容都是暂未被实现的,比如类、方法。属性之所以不能被abstract修饰,是因为属性不存在"尚未被实现"的状态。比如你可能会联想到int age; 或是String name; 但可惜的是,在申明变量时,int会默认给age赋予初始值0,String会默认给name赋予初始值""。因此属性达不到"尚未被实现的状态",从而不能被abstract修饰。
6. 抽象类和普通类在于:抽象类不能进行实例化,一方面抽象方法类似于接口的方法;另一方面,非抽象方法又和普通类方法相同,所以它兼备接口和普通类两种特型。
7. 由于抽象类不能实例化,因此一般是作为父类,由子类进行扩充和实例化,因此,在抽象类的所有protected级别以上的方法或变量,均可以在子类中调用。

  1. 新建2个接口Context和Invocation
    Context
package com.whc.abs;/*** 接口是最抽象的一层,只定义需要实现的接口函数及功能** @author Administrator* @date 2019/4/11*/
public interface Context {// 接口中定义的成员变量默认为staticString name = "admin";int age = 18;Object getName();Object getAge();void set();
}

另一个接口Invocation

package com.whc.abs;/*** @author Administrator* @date 2019/4/11*/
public interface Invocation {Object getSrc();Object getTar();Object getCreateTime();Object getCreator();
}

新建一个抽象类AbstractContext

package com.whc.abs;import java.util.Date;/*** 抽象类实现接口,可以有抽象方法也可以具体实现** @author Administrator* @date 2019/4/11*/
public abstract class AbstractContext implements Context, Invocation {/*** 覆盖接口类的属性name*/public String name = "admin1";/*** 抽象类可以写新定义的方法** @return*/protected String getAccount(){return "100";}/*** 可以在抽象类实现接口的方法** @return*/@Overridepublic Object getName(){return "admin";}/*** 抽象类中可以定义类似接口函数,但必须加上abstract字段** @return*/abstract Object getEmail();/*** 抽象类实现接口的方法** @return*/@Overridepublic Object getCreateTime() {return new Date();}/*** 抽象类实现接口的方法** @return*/@Overridepublic Object getCreator() {return "administrator";}
}

抽象类实现类AbstractContextImpl

package com.whc.abs;/*** @author Administrator* @date 2019/4/11*/
public class AbstractContextImpl extends AbstractContext {/*** 可以在实现类中覆盖抽象类已有的方法** @return*/@Overridepublic Object getName() {return "guest";}/*** 接口中的方法需要实现** @return*/@Overridepublic Object getAge() {return "25";}/*** 接口中的方法需要实现*/@Overridepublic void set() {}/*** 接口中的方法需要实现** @return*/@OverrideObject getEmail() {return null;}/*** 接口中的方法需要实现** @return*/@Overridepublic Object getSrc() {return null;}/*** 接口中的方法需要实现** @return*/@Overridepublic Object getTar() {return null;}public static void main(String[] args) {AbstractContext context = new AbstractContextImpl();System.out.println(context.name);//访问的是AbstractContext的name成员,它覆盖了接口类的静态成员nameSystem.out.println(context.age);//访问的是接口定义静态变量ageSystem.out.println(context.getAccount());//访问的是抽象类自定义实现的方法System.out.println(context.getName());//访问的是本实现类的方法,因为实现类对抽象类的方法进行了覆盖System.out.println(context.getAge());//访问的是本实现类的方法,实现了Context接口的方法}}

输出结果:

admin1
18
100
guest
25

github地址:

https://github.com/wuhc2006/springboot-practice/tree/master/springboot-thread/src/main/java/com/whc/abs

接口、抽象类和实现类相关推荐

  1. java怎么给类中的私有变量赋值_Java学习笔记分享 如何理解接口抽象类和关键字...

    不知不觉中,千锋重庆学习Java已经半个月了,同学们感觉受益匪浅.有一个同学本来是软件编程专业基础却是意外的差,什么标识符.变量的命名规则.方法的定义.数组.面向对象的封装.继承.多态,还有接口.抽象 ...

  2. IEnumeratorTItem和IEnumerator Java 抽象类和普通类、接口的区别——看完你就顿悟了...

    IEnumerable 其原型至少可以说有15年历史,或者更长,它是通过 IEnumerator 来定义的,而后者中使用装箱的 object 方式来定义,也就是弱类型的.弱类型不但会有性能问题,最主要 ...

  3. java实体类实现抽象类_java接口、抽象类、实体类关系介绍

    接口:接口是一个引用类型,与类相似,不过在接口中只能包含常量,方法名和嵌套类型.没有构造器,所以不能被实例化只能被类所实现或者被另外的接口所继承.在接口中声明的方法没有方法体. 抽象类:将类层次中共有 ...

  4. 接口可以继承接口吗?接口、抽象类、实体类的关系

    1.接口可以继承接口,抽象类不可以继承接口,但可以实现接口. 2.抽象类可以继承实体类.抽象类可以实现(implements)接口,抽象类是否可继承实体类,取决于实体类必须是否有明确的构造函数. 3. ...

  5. C++中的接口(抽象类)

    1.Cpp中的接口(抽象类) 接口描述了类的行为和功能,而不需要完成类的特定实现.接口是使用抽象类来实现的,抽象类与数据抽象互不混淆,数据抽象是一个把实现细节与相关的数据分离开的概念.如果类中至少有一 ...

  6. java接口与类相同不同_浅谈java的接口和C++虚类的相同和不同之处

    C++虚类相当于java中的抽象类,与接口的不同之处是: 1.一个子类只能继承一个抽象类(虚类),但能实现多个接口 2.一个抽象类可以有构造方法,接口没有构造方法 3.一个抽象类中的方法不一定是抽象方 ...

  7. 接口抽象类继承父类和子类

    1.接口是什么? 接口可以理解为一个特殊的抽象类,是由全局常量和公共抽象方法组成的. 所以,如果,一个抽象类的方法都是抽象的,那么就可以通过接口的形式来表示. class 用于定义类 interfac ...

  8. C++ 接口(抽象类)

    该博文为原创文章,未经博主同意不得转载,如同意转载请注明博文出处 本文章博客地址:https://cplusplus.blog.csdn.net/article/details/105020800 接 ...

  9. jdk8 接口抽象类区别_JDK 8时代的抽象类与接口

    jdk8 接口抽象类区别 在新的Java 8日期和时间API:Stephen Colebourne的访谈中 , Stephen Colebourne告诉Hartmut Schlosser :" ...

最新文章

  1. PTA基础编程题目集-7-1 厘米换算英尺英寸
  2. 2-SAT 问题 详解
  3. 理解Hinted Handoff
  4. linux mint输入法托盘,linux mint12安装ibus之后,语言栏不跟随光标和系统托盘输入法图标不能显示问题解决...
  5. 【bzoj4080】[Wf2014]Sensor Network 随机化
  6. HDU - 3518 Boring counting(后缀数组)
  7. TensorFlow升级1.4:Cannot remove entries from nonexistent file \lib\site-pack
  8. java ecc signature_如何用python验证android/java的ECC签名
  9. AWS codecommit 的学习记录
  10. Python之NLP(转)
  11. windos读写ext3工具_“ ext2fsd” Windows系统工具,用于读写ext2 / 3/4文件系统
  12. Java基础恶补系列
  13. ubi命令用法(linux)
  14. 基于python的数字图像处理--学习笔记(二)
  15. heka 输出到mysql_HEKA-系统介绍
  16. 1.cpt介绍与思科设备的基本配置
  17. 计算机技术对身体有益,对眼睛有益的7种食物,常看电脑和手机的你一定要多吃!...
  18. python手写字体程序_深度学习---手写字体识别程序分析(python)
  19. 不会这 9 种常用的软件工具!你敢说你会网络安全?
  20. 微信小程序实现图案绘制

热门文章

  1. Leaflet框选截图 网页框选截图 -- 类似QQ截图功能
  2. java精灵召唤_精灵召唤之梦游仙境BT版
  3. 120帧手机动态壁纸_OPPO Find X2支持独立芯片视频动态插帧,30帧以下可升至120帧...
  4. HTML中跨行(rowspan)跨列(colspan)操作
  5. WPF 实现带蒙版的 MessageBox 消息提示框
  6. 24GHz道闸防砸雷达传感器SRR189 winfrom 调试小程序
  7. matlab计算miou值,【Miou分享】Photoshop肤色还原
  8. 样式表空格与不空格的关系你分清楚了吗?
  9. 算法实践:林克的背包 (动态规划)
  10. 游戏抽奖计算机原理,VB6.0编写电脑抽奖程序源码教程