Java-接口interface定义和使用

1.什么是接口

Java为单继承,当父类的方法种类无法满足子类需求时,可实现接口扩容子类能力。

即:Java中使用抽象类/父类表示通用属性时,每个类只能继承一个类,假如子类已经从一个父类继承了,就不能再继续继承另外的父类。但每个类可以实现多个接口,这样子类就拥有了更多的能力。

微观概念:接口是一种能力和约定。

接口的定义:代表了某种能力

方法的定义:能力的具体要求

2.接口的语法

API(应用程序编程接口): Application Program Interface

接口相当于特殊的抽象类,定义方式、组成部分与抽象类类似。

接口的定义语法:

interface 接口名 { }

接口的定义要求:

没有构造方法,不能创建对象

只能定义:公开静态常量、公开抽象方法

public interface MyInterface {

public static final String FIELD = "value";

public abstract void method();

}

//public 关键字仅限用于接口在于其同名文件中被定义

interface MyInterface {

// 公开静态常量(只能): public static final

public static final String A = "hello";

String D = "good"; // public static final 默认隐式存在、修饰

// 公开抽象方法(只能): public abstract

public abstract void method();

void m(); // public abstract 默认隐式存在、修饰

}

接口与抽象类的【相同】:

可编译为字节码文件(.class)

不能创建对象(接口不是类,也没有构造方法)

可以作为引用类型

具备Object类中所定义的方法

接口与抽象类的【不同】:

所有属性都只能且默认是公开静态常量,隐式使用public static final修饰

所有方法都只能且默认是公开抽象方法,隐式使用public abstract修饰

没有构造方法、没有动态/静态代码块

接口的使用语法:

// 增加/赋予1种/多种能力(逗号分隔) [约定]

calss Sub extends Super implements 接口名,接口名 {

@OverRide

public 返回值 method() { ... }

}

3.接口的规范

任何类在实现接口时,必须实现接口中所有的抽象方法,否则此类为抽象类。

实现接口中抽象方法,访问修饰符必须是public。

4.接口引用

同父类一样,接口也可声明为引用,并指向真实类对象。

注意:

使用接口引用作为方法形参,实现更自然的多态(只关注能力-具备能力的类对象均可传入)

仅可调用接口中所声明的方法,不可调用实现类中独有的方法

可强转回真实类本身类型,进行独有方法调用(注意判断真实类对象 instanceof)

接口引用的应用(伪代码示例-eclipse可编译运行)

/* (可编译通过的伪代码) */

// 使用接口引用作为方法形参,实现更自然的多态(只关注能力-具备能力的类对象均可传入)

public class TestApply {

public static void main(String[] args) {

// 接口应用伪代码

System.out.println("接口应用伪代码");

}

}

abstract class 船 implements 会漂浮的 {

public abstract void 漂浮(); // 子类去覆盖

}

class 小舟 extends 船 {

public void 漂浮() {}

}

class 游艇 extends 船 {

public void 漂浮() {}

}

class 木筏 extends 船 {

public void 漂浮() {}

}

class 纸壳 {}

class 纸壳箱 extends 纸壳 implements 会漂浮的 {

public void 漂浮() {

System.out.println("纸壳箱通过胶带多次山绕,具备了可以承载重量后,漂浮在水面上");

}

}

class 瓶子 {}

class 矿泉水瓶 extends 瓶子 implements 会漂浮的 {

public void 漂浮() { }

}

class 树 {}

class 大木头 extends 树 implements 会漂浮的 {

public void 漂浮() { }

}

class GameTeam {

// public void 过汉江 (船 boat) {

public void 过汉江 (会漂浮的 n) { // 使用接口引用作为方法形参,实现更自然的多态(关注行为、能力)

System.out.println("n可以传入具备 会漂浮的 能力的对象均可-多态");

}

}

interface 会漂浮的 {

public abstract void 漂浮();

}

接口引用指向实现类对象,以及强转回实现类对象

/* interface.java */

// 定义了一种能力:会跑的

interface Runnable {

public abstract void run();

}

// 定义了一种能力:会游的

interface Swimmable {

public abstract void swim();

}

// 定义了一种能力:会爬的

interface Climbable {

void climb();

}

// 定义了一种能力:会飞的

interface Flyable {

void fly();

}

/* TestApplyInterface.java */

public class TestApplyInterface {

public static void main(String[] args) {

Animal a = new Dog(); // 多态:父类引用指向子类对象

// 接口引用指向实现类对象,仅可调用接口中所声明的方法

Runnable r = new Dog(); // 指向一个会跑的xxx

r.run();

r = new Cat();

r.run();

r = new Bus();

r.run();

// 接口引用可强转回类的真实对象,进行独有的属性和方法的调用

if (r instanceof Bus) {

Bus b = (Bus)r;

System.out.println(b.seatNum);

}

}

}

class Animal{

String breed;

int age;

String sex;

public void eat() {}

public void sleep() {}

}

// implements 接口名 : 增加/赋予一种能力 [约定]

class Dog extends Animal implements Runnable,Swimmable { // 实现--->落地

String furColor;

public void run() {

System.out.println("狗在奔跑...");

}

@Override

public void swim() {

System.out.println("狗在游泳...");

}

}

// implements 接口名,接口名 : 增加/赋予多种能力(逗号分隔) [约定]

class Cat extends Animal implements Runnable,Climbable{

String furColor;

public void run() {

System.out.println("猫在奔跑...");

}

public void climb() {

System.out.println("猫在爬树...");

}

}

class Fish extends Animal{

//public void swim() {}

}

class Bird extends Animal{

//public void fly() {}

}

class Bus implements Runnable{

int seatNum = 50;

@Override

public void run() {

System.out.println("公交车在跑...");

}

}

输出:

狗在奔跑...

猫在奔跑...

公交车在跑...

50

Java接口属性值定义_Java接口(interface)的定义和使用相关推荐

  1. java的属性只能在类里面 方法外面定义

    java的属性只能在类里面 方法外面定义 区别于python:python 既能在类里面(类属性) 又能在方法里面定义属性(实例属性) 转载于:https://www.cnblogs.com/clas ...

  2. Java约定俗成怎么定义_Java接口定义规范,摘自晓风轻专栏

    1. 返回格式不统一 同一个接口,有时候返回数组,有时候返回单个:成功的时候返回对象,失败的时候返回错误信息字符串.工作中有个系统集成就是这样定义的接口,真是辣眼睛.这个对应代码上,返回的类型是map ...

  3. java端口是多少钱_Java 接口,最少必要知识

    1.接口的基本概念 在 Java 中,被关键字 interface 修饰的"类"是接口. 接口的定义如下: interface 接口名称{ 全局常量: 抽象方法: } 2. 接口的 ...

  4. JAVA 抽象类、值交换、接口、多态

    1 抽象类 为什么使用抽象类 1:定义Dog类 有颜色属性和叫的方法 2:定义Bird类 有颜色属性和叫的方法 3:定义其父类Animal 1:抽取共性颜色属性和叫的方法 1:颜色的属性可以使用默认初 ...

  5. java 接口方法名重复_Java接口/实现命名约定[重复]

    本文翻译自:Java Interfaces/Implementation naming convention [duplicate] This question already has an answ ...

  6. java接口有非抽象方法_Java接口、抽象方法

    1)Java接口(Interface),是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能) ...

  7. java对外查询接口注意的地方_Java接口注意点

    1.接口可以多实现:一个实现类可以同时实现多个接口 package com.qf.demo02_interface; //定义一种规则: interface A{ public void testA( ...

  8. java 代码 二义性是什么_Java接口默认方法带来的问题分析【二义性问题】

    本文实例分析了Java接口默认方法带来的问题.分享给大家供大家参考,具体如下: 一 点睛 Java 8中,如果一个类实现两个或多个接口,即"变相"的多继承,但是若其中两个接口都包含 ...

  9. java接口可以扩展抽象类_Java—接口与抽象类

    1.语法层面上的区别 1)抽象类可以提供成员方法的实现细节,而接口中只能存在public abstract 方法: 2)抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是public sta ...

最新文章

  1. 解决org.apache.shiro.session.UnknownSessionException: There is no session with id的问题
  2. python点操作符语法_最基础的python语法
  3. zblog音频MP3播放器插件
  4. python2.7安装sqlite3模块
  5. 一个简单的定时任务小例子
  6. 【Java与智能设备】用户界面基础
  7. 主成分分析结果成分不显著_spss主成分分析结果解读
  8. 动态拨号云服务器安装Ubuntu系统使用说明
  9. Linux是怎么来的?终于有一篇文章讲清楚了
  10. GitHub 中国区前 100 名到底是什么样的人?
  11. 180422 3步法Windows10引导Ubuntu开机启动
  12. Windows 检测PPT WPS 幻灯片播放并获取窗口句柄
  13. 在springboot中使用jsp,设置webapp目录时的操作步骤
  14. sqlserver2012 查询远程数据库
  15. 你真的理解图像处理经典算法 SIFT 吗?最深入、最全面综述:尺度不变特征转换
  16. ORA-00600 [ktspgfb-1]
  17. 期末入门题库-C#实现
  18. 小米MIUI禁止系统更新
  19. matlab中的神经网络怎么用,matlab神经网络训练方法
  20. 碳排放zc汇总、碳排放权交易、省级碳排放效率、环保数据集(2007-2022年)

热门文章

  1. Eclipse 安装黑色主题皮肤(DarkTheme)
  2. 流媒体服务器 ZLMediaKit介绍
  3. 【活动预告】网易数字+技术线上沙龙 - 升级!数字化转型下的架构实践
  4. 涨知识!从草根到百万年薪程序员的十年风雨之路,搞懂这些直接来阿里入职
  5. 乔巴机器人 番外篇_乔巴超级机器人系列 篇二:乔巴超级机器人三号四号五号拼装及合体...
  6. Android问题集锦之三十七:No resource found 'Theme.AppCompat.Light.DarkActionBar'
  7. 【快速排序】n个元素最少要进行几趟?--王海艳
  8. 自学 Python 两个月的总结
  9. [20][03][71] Log Forging
  10. 【格蕾】重要的GCC内置函数总结