[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 条评论
登录 后参与评论

相关文章

来自专栏aCloudDeveloper

十个例子让你完全搞懂 C++ 的虚函数(不懂来找我)

Author: bakari  Date: 2012.4.8 虚函数是C++中非常重要的一个概念,它最大的好处是能够触发动态绑定。C++中的函数默认不使用动态绑...

2005
来自专栏自动化测试实战

接口测试基础——第7篇 简单的Python知识普及(二)之装饰器

41614
来自专栏Golang语言社区

Go语言与面向对象编程

学习Go语言差不多快两个月了,感觉这个过程还是蛮快乐的,翻翻英文资料,写写小程序,总是觉得有好多东西都搞不明白,一步步走下来,却发现,这些迷惑好像也是不可或缺的...

3767
来自专栏屈定‘s Blog

Java8 Lambda(一)-函数式接口

实习前只是粗略的看了下Java8的一些基本语法,但是没有系统的学习过.在使用一段时间后决定系统的对其进行一次分析,加深对Java8函数式编程的理解,提高自己的编...

913
来自专栏aCloudDeveloper

LeetCode:151_Reverse Words in a String | 字符串中单词的逆反 | Medium

题目:Reverse Words in a String Given an input string, reverse the string word by w...

2016
来自专栏mukekeheart的iOS之旅

OC学习12——字符串、日期、日历

  前面主要学习了OC的基础知识,接下来将主要学习Foundation框架的一些常用类的常用方法。Foubdation框架是Cocoa编程、IOS编程的基础框架...

2917
来自专栏TechBox

浅析对象等同性判断

1814
来自专栏从流域到海域

Python 元类(MetaClass)

Python 动态语言的动态特性 Python是解释运行的动态语言,它与Java最大的不同是Java的类和方法是在编译时完成定义的,而对Python来说,...

1848
来自专栏个人随笔

Java 接口理论篇

接口的两层含义:接口作为数据类型   狭义的接口  接口的第二层含义:工具 广义的接口 在接口中所有的变量都是静态常量 在接口中所有方法都是抽象方法 定义一个接...

3096
来自专栏Jacklin攻城狮

Objective-C Runtime:深入理解成员变量与属性

在上篇文章Objective-C Runtime:深入理解类与对象中,讲解了类与对象的相关内容。

743

扫码关注云+社区