abstract class AbsDemo
{
abstract void show1();
abstract void show2();
}

当一个抽象类中的方法都是抽象的时候,这时可以将该抽象类用另一种形式定义和表示-----接口  interface

定义接口使用的关键字不是class,是interface。

对于接口当中常见的成员:而且这些成员都有固定的修饰符
1. 全局常量:public static final
2. 抽象方法:public abstract

由此得出结论,接口中的成员都是公共的权限。

interface Demo
{
public static final int NUM = 4;
public abstract void show1();
public abstract void show2();
}

如果接口中不写固定修饰符,如下:

interface Demo
{
int NUM = 4;
void show1();
void show2();
}

编译的时候就会自动给你加上,所以这样写也是可以的。
但是不推荐这样写,影响阅读性。

实现implements

interface Demo
{
public static final int NUM = 4;
public abstract void show1();
public abstract void show2();
}

类与类之间是继承关系,类与接口之间是实现关系。

接口不可以实例化。
只能由实现了接口的子类并覆盖了接口中所有的抽象方法后,该子类才可以实例化。
否则,这个子类就是一个抽象类。

class DemoImpl implements /*实现*/ Demo
{
public void show1()
{}
public void show2()
{}
} class InterfaceDemo
{
public static void main(String[] args)
{
DemoImpl d = new DemoImpl();
System.out.println(d.NUM);
System.out.println(DemoImpl.NUM);
System.out.println(Demo.NUM);
//这3中输出方法都可以
}
}

多实现

在java中不直接支持多继承,因为会出现调用的不确定性。
所以java将多继承机制进行改良,在java中变成了多实现。

一个类可以实现多个接口。

interface A
{
public abstract void show();
} interface Z
{
public abstract void show();
} class Test implements A,Z //多实现
{
public void show()//把上面两个show方法都覆盖了.
{
}
}

一类在继承另一个类的同时,还可以实现多个接口。

class Q
{
public void method()
{}
}
class Test2 extends Q implements A,Z
{
}
//接口的出现避免了单继承的局限性 class InterfaceDemo
{
public static void main(String[] args)
{
Test t = new Test();
t.show();
}
}
interface CC
{
void show();
}
interface MM
{
void method();
} interface QQ extends CC,MM //接口与接口之间是继承关系,可以多继承,因为没有方法体
{
}

笔记本电脑使用
为了扩展笔记本的功能,但日后出现什么功能设备不知道。
就定义一个规则,只要日后出现的设备都符合这个规则就可以了。
规则在java中就是接口。

interface USB//暴漏的规则
{
public void open();
public void close();
}
class BookPC
{
public static void main(String[] args)
{
//useMouse(null);
useUSB(new Upan()); //一年后 功能扩展
//接口类型的引用,用于接收(指向)接口的子类对象.
useUSB(new UsbMouse());
} //使用规则
public static void useUSB(USB u)
{
u.open();
u.close();
}
}
//一年后,买了一个U盘
//实现规则
class Upan implements USB
{
public void open()
{
System.out.println("upan open");
}
public void close()
{
System.out.println("upan close");
}
}
//这就是前期对外开放的接口,后期可以使用进来的设备
class UsbMouse implements USB
{
public void open()
{
System.out.println("UsbMouse open");
}
public void close()
{
System.out.println("UsbMouse close");
}
}

Java学习个人备忘录之接口的更多相关文章

  1. Java学习笔记之---比较接口与抽象类

    Java学习笔记之---比较接口与抽象类 抽象类是描述事物的本质,接口是描述事物的功能 接口与抽象类的异同 1.一个类只能继承一个父类,但是可以有多个接口 2.抽象类中的抽象方法没有方法体,但是可以有 ...

  2. 【Java学习笔记】Map接口的子接口---TreeMap

    TreeMap,与TreeSet类似,可以对集合中的元素进行排序,同时保持元素的唯一性. 应注意,Comparable(实现接口,记得覆盖comparaTo方法),Comparator的使用. imp ...

  3. Java学习笔记——继承、接口、多态

    浮点数的运算需要注意的问题: BigDecimal operand1 = new BigDecimal("1.0"); BigDecimal operand2 = new BigD ...

  4. Java学习个人备忘录之多线程

    进程:正在进行中的程序(直译). 线程:就是进程中一个负责程序执行的控制单元(执行路径) 一个进程中可以有多个执行路径,称之为多线程. 一个进程中至少要有一个线程. 开启多个线程是为了同时运行多部分代 ...

  5. java学习笔记——Collection集合接口

    NO 方法名称 描述 1 public boolean add(E e) 向集合中保存数据 2 public void clear() 清空集合 3 public boolean contains(O ...

  6. Java学习:常用函数接口

    常用函数接口 什么是函数式接口? 函数式接口,@FunctionalInterface,简称FI,简单的说,FI就是指仅含有一个抽象方法的接口,以@Functionalnterface标注 注意:这里 ...

  7. Java学习个人备忘录之入门基础

    临时配置环境方式:查看path下的环境变量 set path修改path下的环境变量 set path=haha删除path下的环境变量 set path=查看当前java的版本 javac -ver ...

  8. Java学习笔记-抽象类与接口

    抽象类用于在类中不用具体实现,而在子类中去实现的类 抽象类 抽象类概述 抽象定义:抽象就是从多个事物中将共性的,本质的内容抽取出来 抽象类:Java中可以定义没有方法体的方法,该方法的具体实现由子类完 ...

  9. Java学习笔记(十)面向对象---接口

    理解 初期理解 可以认为接口是一个特殊的抽象类.当接口中的方法都是抽象的,那么该类可以通过接口的形式来表示. class用于定义类 interface用于定义接口 格式特点 接口中常见定义:常量,抽象 ...

随机推荐

  1. table表单制作个人简历

    应用table表单,编程个人简历表单,同时运用了跨行rowspan和跨列colspan. <!DOCTYPE html> <html> <head> <met ...

  2. 【每天一条Linux指令-Day1】kill掉多个mysql的进程

    我被问到过一个shell的问题,问的是如何kill掉多个mysql的进程? 怎么把这个的pid传递下去 ps -ef|grep mysql | xargs kill -9 ps -ef|grep my ...

  3. PHP实现openSug.js参数调试

    这是一款利PHP对百度搜索下拉框提示免费代码实现参数配置调试的程序源代码. 由想要对网站进行搜索下拉调试的站长朋友们进行方便.快速的效果演示,具体参考下面的PHP代码. 如何使用? 请新建一份PHP文 ...

  4. php源码建博客1--搭建站点-实现登录页面

    主要: 站点搭建 实现登录页面 分析及改进 站点搭建 1)  在apache安装目录下: [conf\extra\httpd-vhosts.conf]加入站点配置 <VirtualHost *: ...

  5. Java核心技术36讲----------谈谈final、finally、finalize有什么不同

    一.final 1.final修饰方法时,需要注意的点: #final修饰方法时,之前的第二个原因是效率.但是如果方法过于庞大,可能看不到内嵌调用带来的任何性能提升.在最近的Java版本中,不需要使用 ...

  6. 实验吧web登陆一下好吗

    知识点: 万能密码'=' 一道登陆型的SQL注入题目,这种题目一般有四种题型: 1.在username中通过union联查select一个已知字符来与传递的password匹配完成登陆 2.使用万能密 ...

  7. 用kubeadm构建k8s集群部署

    一.环境 三台centos机器 二.软件及容器准备 1.安装docker环境 本例安装 docker-ce版本,repo源为docker-ce.repo文件,拷贝到 /etc/yum.repos.d下 ...

  8. 基于傅里叶变换的音频重采样算法 (附完整c代码)

    前面有提到音频采样算法: WebRTC 音频采样算法 附完整C++示例代码 简洁明了的插值音频重采样算法例子 (附完整C代码) 近段时间有不少朋友给我写过邮件,说了一些他们使用的情况和问题. 坦白讲, ...

  9. SpaceVim 语言模块 dart

    原文连接: https://spacevim.org/cn/layers/lang/dart/ 模块简介 功能特性 依赖安装及启用模块 启用模块 语法检查及代码格式化 安装 dart-repl 快捷键 ...

  10. STM32的GUI库使用

    1. 实验平台使用百为的STM32F103开发板 2. 例程目录\百为stm32开发板光盘\stm32_gui_lib\Project\Embedded_GUI_Example\EWARM 3. 直接 ...