[Java 基础]接口

抽象类和抽象方法

抽象方法

在面向对象编程语言中抽象方法指一些只有方法声明而没有具体方法体的方法抽象方法一般存在于抽象类或接口中。

java中,抽象方法就是以 abstract 修饰的方法,只需要声明而不需要实现

abstract void f();

抽象类

包含抽象方法的类叫抽象类。

abstract class Sample {
 private int param1;
 abstract void f1();
 void f2() {}
 }

注:

1、如果一个类包含有抽象方法,则必须限定为抽象类,否则编译器会报错。

2、抽象类不能实例化,否则编译器会报错。

接口

什么是接口

java中,接口是以 interface 来修饰的。

接口可以被视为一个比“抽象类”更加抽象的类。

实现接口

一个类遵循某个特定或一组接口,必须使用 implements 关键字。

interface Fly {
 void fly();
 }
 
 class Bird implements Fly {
     @Override
 public void fly() {
         System.out.println("展翅飞翔");
     }    
 }

注:接口中的方法必须是 public 类型,可以不显示地指定。但是如果指定为其他类型,编译器会报错。

扩展接口

玩过游戏的朋友们,肯定熟悉这个模式。

一名战士需要具备战斗能力。一名骑士不仅需要具备战斗能力,也需要具备骑术。

更进阶的圣骑士则还需要具备法师一般的魔法能力。这个关系可以抽象成以下代码:

interface Warrior {
 void fight();
 }
 
 interface Knight extends Warrior {
 void riding();
 }
 
 interface Enchanter {
 void magic();
 }
 
 // Paladin类实现多个接口,需要包含这些接口的所有方法
 class Paladin implements Knight, Enchanter {
 public void fight() {}
 public void riding() {}
 public void magic() {}
 }

多重继承

请考虑如下图的情况,一名在职研究生既是职工,也是学生,也是研究生。如果我们要在代码中实现这个继承关系,该如何去做?

C++中支持多重继承,但是JAVA中不支持多重继承,以下方式是错误的。一个类不能扩展多个类。

class Person {};
 class Student extends Person {};
 class Postgraduate extends Student {};
 class Employee extends Person {};
 class OnJobPostgraduate extends Postgraduate, Employee {};

JAVA中虽然不支持多重继承,但是可以通过接口实现类似的行为。一个类可以实现多个接口。

interface Person {};
 interface Student extends Person {};
 interface Postgraduate extends Student {};
 interface Employee extends Person {};
 class OnJobPostgraduate implements Postgraduate, Employee {};

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Petrichor的专栏

Python 基础元素

891
来自专栏Jimoer

java8在Collection中新增加的方法removeIf

记得我在以前找工作的经历中,遇到过一个面试官问过我一个很基础的问题。问题是:有一个List中有10个元素,我现在想从中删除3个元素,请问怎么做?我当时也没想,就...

3338
来自专栏Android Note

介绍Kotlin第二部分(翻译篇)

1304
来自专栏程序员互动联盟

【面试宝典】static 关键字

面试官:static关键字你了解吗?说一下你的认识。 小白:啊.....有点晕呀,这么宽泛的问题,我该从哪回答呢?头脑一片空白。让我想想...... 面试官:没...

3466
来自专栏程序员互动联盟

【面试宝典】Java如何打印数组

面试官: 如何打印一个数组? 小白:用for循环。 面试官:如何打印一个List? 小白:用for循环。 面试官:如果打印一个二维数组? 小白:还是for循环。...

3499
来自专栏吾爱乐享

java之学习date类的综合案例-算一下你来到这个世界多少天

1004
来自专栏WeaponZhi

轻松初探 Python 篇(四)—list tuple range 知识汇总

这是「AI 学习之路」的第 4 篇,「Python 学习」的第 4 篇 今天的主题是 Python 的序列类型(Sequence Types),内容很多,干货很...

3106
来自专栏xingoo, 一个梦想做发明家的程序员

二分搜索技术

分治法的基本思想:将一个规模为n的问题,分解为k个规模较小的子问题,这些子问题互相独立且与原问题相同。递归的解这些子问题,然后将各个子问题的解合并得到原问题的解...

1849
来自专栏程序员宝库

UTF-8 为什么会比 UTF-16 浪费?

上帝说:『首先取下栓,然后不多不少数到三。应该数到三,你数到的数字是三。你除了数到三,既不要数到四,也不要数到二,五是数多了。「三」一旦被数到,成为被数到的第三...

2745
来自专栏静晴轩

JavaScript 字符串实用常操纪要

JavaScript 字符串用于存储和处理文本。因此在编写 JS 代码之时她总如影随形,在你处理用户的输入数据的时候,在读取或设置 DOM 对象的属性时,在操作...

3607

扫码关注云+社区