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

在实施接口中,我们利用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类

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/299871.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

说说大型高并发高负载网站的系统架构

By Michael 转载请保留出处:俊麟 Michael’s blog (http://www.toplee.com/blog/?p71) Trackback Url : http://www.toplee.com/blog/wp-trackback.php?p71 我在CERNET做过拨号接入平台的搭建,而后在Yahoo&3721从事过搜索引擎前端开发,…

数据库优化的几种方式

数据库的优化有很多方式,下面介绍一下数据库的优化方式。1、选取最适用的字段属性。MySQL可以支持大数据量的存取,但是数据库中的表越小,在上面执行的查询就越快。所以可以将表中的字段宽度设置的尽可能小。2、使用连接来代替子查询&#xff…

删除windows7中的“兼容性疑难解答”右键菜单

windows7中的exe文件右键菜单中有一个“兼容性疑难解答”项,可以检测exe兼容性问题,但对于我们来说一般没有什么用处,检测到问题也不是我们用户能解决的,反而把右键菜单变长了。删除它的方式如下: 把如下文件保存为一个…

java基础之java输入输出语句

1、使用Scanner 使用时需要引入包importjava.util.Scanner;首先定义Scanner对象 Java基础学习:java输入输出语句 比如: Java基础学习:java输入输出语句 2、使用BufferedReader 用前需要引入importjava.io.Reader; Java基础学习&#xff1…

自制WiFiPineapple

什么是WiFiPineapple?关于这个问题,相信各位心里都有自己的答案,这里引用下radiowar的介绍:自从2008开始,WiFi PineApple成为了最受欢迎的安全测试设备,在开源无线安全审计软件社区的支持,WiFiP…

全世界的狗都没有“生殖隔离” | 今日趣图

全世界只有3.14 % 的人关注了青少年数学之旅动物界的“一拳超人”雀尾螳螂虾它有一双力大无比的铁拳出拳速度在五十分之一秒内最大速度可达80km/h产生约60kg的冲击力威力足以匹敌小口径手枪子弹(图源冷知君,侵权删)如何把清水一秒变可乐&…

聊聊Go的三色标记法

这里是Z哥的个人公众号每周五11:45 按时送达当然了,也会时不时加个餐~我的第「203」篇原创敬上大家好,我是 Z 哥。今天带来一篇久违的技术型文章。之前也有不少小伙伴会问,Z 哥你好久没发技术性文章了。其实主要原因有…

asp.net 日期转换

Sql Server中的日期与时间函数 1. 当前系统日期、时间 select getdate() 2. dateadd 在向指定日期加上一段时间的基础上,返回新的 datetime 值 例如:向日期加上2天 select dateadd(day,2,2004-10-15) --返回:2004-10-17 00:…

12种方法返回2个文件路径之间的公共基路径ExtractBasePath

方法一:Boris Kumpar function ExtractBasePath(const Path1,Path2:string):string; const PATH_DELIMITER \; DRIVE_DELIMITER :; var P1,P2:PChar; cnt,j:Integer; begin P1:PChar(Path1) ; P2:PChar(Path2) ; cnt : 1; j : 0; {$B-} while (P1^ <>…

架构师讲解Java中websocket的应用

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

CocoStudio游戏发布后资源加密大致实现思路

截止到目前&#xff0c;CocoStudio版本已经发展到1.3.0.1&#xff0c;各个子工具间也已经发生了巨大变化。但是&#xff0c;无论是动画编辑器&#xff0c;UI编辑器&#xff0c;场景编辑器还是数据编辑器&#xff0c;它们生成&#xff08;导出&#xff09;的文件在商业开发中往往…

当你死后尸体如何处理?两种新玩法了解一下!

全世界只有3.14 %的人关注了青少年数学之旅据国外媒体报道&#xff0c;死亡是一个庄严肃穆的事情&#xff0c;但是依据不同的文化&#xff0c;人类死亡之后会被认为肉体与灵魂分离&#xff0c;采取的葬礼方式存在很大差异&#xff0c;你想过你的葬礼会是什么样吗&#xff1f;烟…

.NET Core开发实战(定义API的最佳实践)Source Generators版

前言极客时间上的《.NET Core开发实战》是一门非常好的课程&#xff0c;作者肖伟宇在第31课&#xff08;https://time.geekbang.org/course/detail/100044601-201165&#xff09;介绍了定义API的最佳实践。大意如下&#xff1a;Controller这一层负责与前端用户的交互&#xff0…

【转】2007高校BBS上20个睿智的冷笑话

1.真正的浪漫求婚应该是这样的&#xff1a;一位风度翩翩的男子请了10位同事吃饭&#xff0c;其中就有他心仪的mm。吃到一半时&#xff0c;他忽然站起来走到mm身旁&#xff0c;然后把mm坐的椅子整个搬了个90度面朝自己&#xff0c;而此刻mm嘴里塞满了各种食物……这时&#xff0…

多年经验的程序员迷失了自己,该怎么办?

多年的程序员迷失了自己&#xff0c;该怎么办&#xff1f; 本文选自《我也能做CTO之程序员职业规划 》一书 我应该朝哪个方向发展&#xff1f;我不做这行还能做什么&#xff1f;当现实情况与理想目标之间的差距越拉越大时&#xff0c;大多数刚入行的IT人员都会提出这样的问题&a…

大神讲解Java for循环的几种用法

本文非常适合初学Java的程序员&#xff0c;主要是来了解一下Java中的几种for循环用法&#xff0c;分析得十分详细&#xff0c;一起来看看。 J2SE 1.5提供了另一种形式的for循环。借助这种形式的for循环&#xff0c;可以用更简单地方式来遍历数组和Collection等类型的对象。本文…

苍天饶过谁?| 今日最佳

全世界只有3.14 % 的人关注了青少年数学之旅&#xff08;图源人民日报&#xff0c;侵权删&#xff09;

快速选择实例

功能&#xff1a;查找集合S中第k个最小元。 快速选择算法修改自快速排序算法&#xff0c;当算法终止时&#xff0c;第k个最小元就在位置k上。这破坏了原来的排序&#xff1b;如果不希望这样&#xff0c;那么需要做一份拷贝。 快速选择函数&#xff1a; /* quick_select.h */#if…

设计模式之桥接

桥接模式的介绍桥接模式就是通过将抽象部分与实现部分分离&#xff0c;把多种可匹配的使用进行组合。其实就是在A类中含有B类接口&#xff0c;通过构造函数传递B类的实现&#xff0c;这个B类就是设计的桥。它是一种结构型设计模式&#xff0c;可将一个大类或一系列紧密相关的类…

WinAPI: midiOutGetNumDevs - 获取 MIDI 输出设备的数目

//声明: midiOutGetNumDevs: UINT; {无参数; 返回 MIDI 输出设备的数目}//举例: