在实施接口中,我们利用interface语法,将interface从类定义中独立出来,构成一个主体。interface为类提供了接口规范。

在继承中,我们为了提高程序的可复用性,引入的继承机制。当时的继承是基于类的。interface接口同样可以继承,以拓展原interface。

接口继承

接口继承(inheritance)与类继承很类似,就是以被继承的interface为基础,增添新增的接口方法原型。比如,我们以Cup作为原interface:

interface Cup {void addWater(int w);void drinkWater(int w);
}

我们在继承Cup的基础上,定义一个新的有刻度的杯子的接口,MetricCup


接口如下:

interface MetricCup extends Cup
{int WaterContent();
}

我们增添了一个新的方法原型WaterContent(),这个方法返回一个整数(水量)。

interface的多重继承

在Java类的继承中,一个衍生类只能有一个基类。也就是说,一个类不能同时继承多于一个的类。在Java中,interface可以同时继承多于一个interface,这叫做多重继承(multiple inheritance)。

比如我们有下面一个Player接口:

interface Player
{void play();
}

我们新增一个MusicCup的接口。它既有Cup接口,又有Player接口,并增加一个display()方法原型。

interface MusicCup extends Cup, Player
{void display();
}

(如何使用interface,见实施接口)

抽象类

在生活中,我们会有一些很抽象的概念。这些抽象的概念往往是许多类的集合,比如:

  • 粮食 (可以是玉米、小麦、大米)

  • 图形 (可以是三角形、圆形、正方形)
    再比如,我们之前举出了例子:

  • 人类 (可以是男人、女人)
    在组织这样的关系时,我们可以使用继承,比如:

    根据我们的常识:

  • "Food类的对象"的说法是抽象的。这样一个对象应该是属于Corn, Rice, Wheat子类中的一个。

  • Food类有eat()方法 (食物可以吃)。然而,这样的一个动作是抽象的。粮食的具体吃法是不同的。比如Corn需要剥皮吃,Wheat要磨成面粉吃。我们需要在每个类中覆盖Food类的eat()方法。


  • Java中提供了抽象类(abstract class)的语法,用于说明类及其方法的抽象性。比如:

abstract class Food {public abstract void eat(); public void happyFood();   {     System.out.println("Good! Eat Me!");   }
}

类中的方法可以声明为abstract,比如上面的eat()。这时,我们不需要具体定义方法,只需要提供该方法的原型。这与接口类似。当我们在比如Corn类中继承该类时,需要提供eat()方法的具体定义。

类中的另一个方法happyFood()并不是

当一个类中出现abstract方法时,这个类的声明必须加上abstract关键字,否则Java将报错。一个abstract类不能用于创建对象。

抽象类的继承

我们可以像继承类那样继承一个抽象类。我们必须用完整的方法定义,来覆盖抽象类中的抽象方法,否则,衍生类依然是一个抽象类。

抽象类的定义中可以有数据成员。数据成员的继承与正常类的继承相同。

总结

interface继承,多重继承

abstract method, abstract类

腾讯架构师讲解Java接口的继承与抽象类相关推荐

  1. 字节跳动架构师讲解Java开发!美的java开发面试

    前言 今天中午收到我司安全部发了一封邮件:Jackson存在安全漏洞.查了一下,这件事并不算很新鲜了(已经过了5天的样子),本文来聊聊吧. 说起来还蛮戏剧化:阿里云向Jackson官方提交了一个Jac ...

  2. 架构师讲解Java中websocket的应用

    这篇文章主要来介绍一下在java项目中,特别是java web项目中websocket的应用. 场景:我做了一个商城系统,跟大多数商城系统,分为客户端和后台,客户端供客户浏览,下单,购买,后台主要管理 ...

  3. 字节跳动架构师讲解Java开发!dockerstop命令

    美团 一面: 1.ConcurrentHashMap实现原理 2.HashMap实现原理 3.锁的实现原理 4.synchronized和重入所实现原理以及区别 5.一个char[]数组,里面有空格, ...

  4. 不是吧阿sir,字节跳动架构师讲解Java开发

    ​ IoC 容器是 Spring⽤来实现 IoC 的载体, IoC 容器实际上就是个Map(key,value),Map 中存放的是各种对象.将对象之间的相互依赖关系交给 IoC 容器来管理,并由 I ...

  5. 第二十八节:Java基础-进阶继承,抽象类,接口

    前言 Java基础 - 进阶继承,抽象类,接口 进阶继承 class Stu {int age = 1; } class Stuo extends Stu {int agee = 2; } class ...

  6. Google首席架构师谈Java的命运

    Google首席架构师谈Java的命运 文 / Peter Seibel 译 / 郝培强 本文是Common Lisp专家Peter Seibel对Google公司首席Java架构师Joshua Bl ...

  7. day13,腾讯架构师深入讲解Java开发

    抽象方法 :被abstract所修饰的方法 抽象类:被abstract所修饰的类 抽象类的语法格式 抽象方法的语法格式 代码举例 package demo01; //定义抽象类 public abst ...

  8. 阿里Java架构师讲解购物车的原理及实现

    今天来写一下关于购物车的东西, 这里首先抛出四个问题: 1)用户没登陆用户名和密码,添加商品, 关闭浏览器再打开后 不登录用户名和密码问:购物车商品还在吗? 2)用户登陆了用户名密码,添加商品,关闭浏 ...

  9. 网易资深Java架构师:java方法的定义和使用

    前言 今年因为这个疫情,感觉这是从工作以来过的最久的一个年了,在家呆的时间不是一般的久,算一算有好几个月呢!我大概是3月底快4月了才出门,投了超多的简历,天天面试面试面试面试面试面试面试-庆幸的是还是 ...

最新文章

  1. IntelliJ IDEA的黑白色背景切换(Ultimate和Community版本皆通用)
  2. 基本套接字TCP和UDP
  3. 元素在父元素内垂直居中的思路
  4. 界面上下固定_【技术浅析】三通道机床自动上下料控制方法应用
  5. Transformer开始往动态路由的方向前进了!厦大华为提出TRAR,在VQA、REC上性能SOTA!(ICCV 2021)...
  6. 虚拟现实设备排行榜(2016年3月27日)
  7. 博客园复用别人的博客模板
  8. android高通WiFi,高通QCA9377 WiFi蓝牙模块芯片介绍,
  9. JAVA开发工程师面试题shiro
  10. Android之adb安装apk
  11. MATLB|电动汽车充放电的最优调度
  12. Android 新浪微博开放平台应用 android签名怎么获得
  13. tomcat介绍-通俗易懂篇
  14. Spring Validation 验证框架全面总结
  15. 北邮iptv用WindowsMediaplayer打不开的解决办法
  16. 第25章 JDBC核心技术第3节
  17. mysql怎样发给别人_怎么把数据库发给别人
  18. 密码包含-数字、大小写、特殊字符-正则表达式
  19. ue4 小知识点 als advanced locomotion system v4 foot ik 坑
  20. 程序员为什么不自己单干?

热门文章

  1. 在.NET Core中设计自己的服务宿主(Service Hosting)框架
  2. 将 Visual Studio 的代码片段导出到 VS Code
  3. .NET 图形化开源爬虫Hawk 3发布
  4. 在 .NET Core 中的并发编程
  5. CoreCLR源码探索(一) Object是什么
  6. 最新版dotnet-cli下的ASP.NET Core和asp.net mvc【RC2尝鲜】
  7. Excel 宏代码实现按相同值分组设置背景颜色
  8. 【ArcGIS遇上Python】窗体版Python批量处理地理数据--栅格裁剪
  9. Android之Dialog提示Unable to add window -- token is not valid; is your activity running?
  10. Android之java.lang.OutOfMemoryError: Failed to allocate a ** byte allocation with **free bytes and 2M