腾讯架构师讲解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类
腾讯架构师讲解Java接口的继承与抽象类相关推荐
- 字节跳动架构师讲解Java开发!美的java开发面试
前言 今天中午收到我司安全部发了一封邮件:Jackson存在安全漏洞.查了一下,这件事并不算很新鲜了(已经过了5天的样子),本文来聊聊吧. 说起来还蛮戏剧化:阿里云向Jackson官方提交了一个Jac ...
- 架构师讲解Java中websocket的应用
这篇文章主要来介绍一下在java项目中,特别是java web项目中websocket的应用. 场景:我做了一个商城系统,跟大多数商城系统,分为客户端和后台,客户端供客户浏览,下单,购买,后台主要管理 ...
- 字节跳动架构师讲解Java开发!dockerstop命令
美团 一面: 1.ConcurrentHashMap实现原理 2.HashMap实现原理 3.锁的实现原理 4.synchronized和重入所实现原理以及区别 5.一个char[]数组,里面有空格, ...
- 不是吧阿sir,字节跳动架构师讲解Java开发
IoC 容器是 Spring⽤来实现 IoC 的载体, IoC 容器实际上就是个Map(key,value),Map 中存放的是各种对象.将对象之间的相互依赖关系交给 IoC 容器来管理,并由 I ...
- 第二十八节:Java基础-进阶继承,抽象类,接口
前言 Java基础 - 进阶继承,抽象类,接口 进阶继承 class Stu {int age = 1; } class Stuo extends Stu {int agee = 2; } class ...
- Google首席架构师谈Java的命运
Google首席架构师谈Java的命运 文 / Peter Seibel 译 / 郝培强 本文是Common Lisp专家Peter Seibel对Google公司首席Java架构师Joshua Bl ...
- day13,腾讯架构师深入讲解Java开发
抽象方法 :被abstract所修饰的方法 抽象类:被abstract所修饰的类 抽象类的语法格式 抽象方法的语法格式 代码举例 package demo01; //定义抽象类 public abst ...
- 阿里Java架构师讲解购物车的原理及实现
今天来写一下关于购物车的东西, 这里首先抛出四个问题: 1)用户没登陆用户名和密码,添加商品, 关闭浏览器再打开后 不登录用户名和密码问:购物车商品还在吗? 2)用户登陆了用户名密码,添加商品,关闭浏 ...
- 网易资深Java架构师:java方法的定义和使用
前言 今年因为这个疫情,感觉这是从工作以来过的最久的一个年了,在家呆的时间不是一般的久,算一算有好几个月呢!我大概是3月底快4月了才出门,投了超多的简历,天天面试面试面试面试面试面试面试-庆幸的是还是 ...
最新文章
- IntelliJ IDEA的黑白色背景切换(Ultimate和Community版本皆通用)
- 基本套接字TCP和UDP
- 元素在父元素内垂直居中的思路
- 界面上下固定_【技术浅析】三通道机床自动上下料控制方法应用
- Transformer开始往动态路由的方向前进了!厦大华为提出TRAR,在VQA、REC上性能SOTA!(ICCV 2021)...
- 虚拟现实设备排行榜(2016年3月27日)
- 博客园复用别人的博客模板
- android高通WiFi,高通QCA9377 WiFi蓝牙模块芯片介绍,
- JAVA开发工程师面试题shiro
- Android之adb安装apk
- MATLB|电动汽车充放电的最优调度
- Android 新浪微博开放平台应用 android签名怎么获得
- tomcat介绍-通俗易懂篇
- Spring Validation 验证框架全面总结
- 北邮iptv用WindowsMediaplayer打不开的解决办法
- 第25章 JDBC核心技术第3节
- mysql怎样发给别人_怎么把数据库发给别人
- 密码包含-数字、大小写、特殊字符-正则表达式
- ue4 小知识点 als advanced locomotion system v4 foot ik 坑
- 程序员为什么不自己单干?
热门文章
- 在.NET Core中设计自己的服务宿主(Service Hosting)框架
- 将 Visual Studio 的代码片段导出到 VS Code
- .NET 图形化开源爬虫Hawk 3发布
- 在 .NET Core 中的并发编程
- CoreCLR源码探索(一) Object是什么
- 最新版dotnet-cli下的ASP.NET Core和asp.net mvc【RC2尝鲜】
- Excel 宏代码实现按相同值分组设置背景颜色
- 【ArcGIS遇上Python】窗体版Python批量处理地理数据--栅格裁剪
- Android之Dialog提示Unable to add window -- token is not valid; is your activity running?
- Android之java.lang.OutOfMemoryError: Failed to allocate a ** byte allocation with **free bytes and 2M