接口:

暂时可以理解为是一种特殊的抽象类

接口是功能的集合,可以看作是一种数据类型,是比抽象类更抽象的“类”

接口只描述所应该具备的方法,并没有具体实现,具体实现由接口的实现类(相当于接口的子类)来完成

这样将功能的实现与定义分离,优化了程序设计

接口的成员方法全抽象,不能存在带有方法体的方法

接口中无法定义普通的成员变量,必须定义为常量

接口定义抽象方法有固定格式

一切事物皆有功能,即一切事物都有接口

接口的定义规则:

public interface MyInterface {
public static final int a = 1;
public abstract void function();
}

接口的实现类(类和类之间叫继承,类和接口之间叫实现):

public class MyInterfaceImpl implements MyInterface{
public void function(){
System.out.println("实现类,重写接口方法");
}
}

测试:

public class Test {

    public static void main(String[] args) {
MyInterfaceImpl my = new MyInterfaceImpl();
my.function();
} }

接口中成员变量的特点:

注意这里的public static final三个修饰词可以省略任意个数,但是效果不变,总是public static final,建议写全

public interface MyInter {
//静态的可以用.方式访问
//final表示不能被修改
public static final int x = 3; }

测试:

public class Test {

    public static void main(String[] args) {
//静态的可以用.方式访问,具体关于static在后边讲
System.out.println(MyInter.x);
}
}

接口中成员方法的特点:

注意这里的public abstract也是选择性书写的,无论怎样效果都是public abstract,建议写全

public interface MyInter {
public abstract void function();
}

实现类,实现接口,重写接口全部抽象方法,创建实现类对象

接口不可以创建对象

子类必须覆盖掉接口中所有的抽象方法后,子类才可以实例化,否则子类是一个抽象类

接口的多实现:

接口最重要的体现:解决多继承的弊端,将多继承这种机制在java中通过多实现完成了

解决安全隐患原理:接口中的方法全都是抽象的,没有主体,方法依赖实现类的重写才可以实现,因此没有安全问题

因此接口的多实现解决了单继承的局限性

举例:

接口A:

public interface A {
public abstract void a(); public abstract void c();
}

接口B:

public interface B {
public abstract void a(); public abstract void b();
}

多实现:

/*
* 类C,同时实现两个接口,接口A,B
* 作为实现类,C必须重写两个接口的所有抽象方法,才可以建立C类对象
* */
public class C implements A, B {
public void a() {
} public void b() {
} public void c() {
}
}

类继承类的同时,还可以实现接口:

类D:

public abstract class D {
public abstract void d();
}

C:

//在继承一个类(只能是一个)的同时,实现多个接口
public class C extends D implements A, B {
public void a() {
} public void b() {
} public void c() {
} public void d() { }
}

接口存在多继承:

由于接口的方法都是抽象的,所以不存在安全隐患

public interface A {
public abstract void a();
}
public interface B {
public abstract void b();
}
public interface C extends A,B{
public abstract void c();
}
public class D implements C{
public void a(){}
public void b(){}
public void c(){}
}

这里有一个有关java的问题:

java中到底存在多继承吗?

答:类没有多继承,接口之间存在多继承

接口的思想:

举例:电脑上有多个插口,这些插口可以插入相应的设备,因为这些设备生产的时候符合了这个插口的使用规则,否则无法插入使用

接口在开发中的好处:

1.接口的出现扩展了功能

2.接口其实就是暴漏出来的规则

3.接口的出现降低了耦合性,设备与设备之间实现了解耦(笔记本电脑USB插口是否被使用电脑都可以运行)

接口和抽象类的共同点:

1.都位于继承的顶端,用于被其他类实现或继承

2.都不能直接实例化对象

3.都包含抽象方法,其子类都必须覆写这些抽象方法

区别:

1.抽象类为部分方法提供实现,避免子类重复实现这些方法,提高代码的重用性;而接口只能包含抽象方法

2.一个类只能继承一个直接父类(可能是抽象类),却可以实现多个接口,接口弥补了java的单继承

思想方面的区别:

抽象类是这个事物中应该具备的内容,继承体系是一种is..a的关系

接口是这个事物中的额外内容,继承体系是一种like...a的关系

伪代码举例:class 贼 extends 人 implements 偷盗

贼本身是一个人,他可以偷盗,不是所有的人都偷盗

选用:

1.优先使用接口,尽量少用抽象类

2.需要定义子类的行为,又要为子类提供共性功能时,选用抽象类

综合案例(电脑):

public interface USB {
public abstract void open();
public abstract void close();
}
public class Mouse implements USB{
public void open(){
System.out.println("开启鼠标");
} public void close(){
System.out.println("关闭鼠标");
}
}
public class Keyboard implements USB{
public void open(){
System.out.println("开启键盘");
}
public void close(){
System.out.println("关闭键盘");
}
}
public class Computer {
public void openComputer(){
System.out.println("笔记本开机");
} public void closeComputer(){
System.out.println("笔记本关机");
}
public void useUSB(USB usb){
usb.open();
usb.close();
} }
public class Test {
public static void main(String[] args) {
//创建笔记本对象,调用笔记本的功能
Computer com = new Computer();
com.openComputer(); //调用笔记本使用USB设备的方法
//参数,是USB接口类型,接口不能建立对象
//调用方法,传递USB接口的实现类的对象
//Mouse m = new Mouse();
com.useUSB(new Mouse());
//使用USB设备,使用键盘
com.useUSB(new Keyboard()); com.closeComputer();
}
}

Java学习笔记10(面向对象三:接口)的更多相关文章

  1. 疯狂java学习笔记之面向对象(三) - 方法所属性和值传递

    方法的所属性: 从语法的角度来看:方法必须定义在类中 方法要么属于类本身(static修饰),要么属于实例 -- 到底是属于类还是属于对象? 有无static修饰 调用方法时:必须有主调对象(主语,调 ...

  2. Java学习笔记之---面向对象

    Java学习笔记之---面向对象 (一)封装 (1)封装的优点 良好的封装能够减少耦合. 类内部的结构可以自由修改. 可以对成员变量进行更精确的控制. 隐藏信息,实现细节. (2)实现封装的步骤 1. ...

  3. 20145316许心远《Java学习笔记》第三周总结

    20145316许心远<Java程序设计>第3周学习总结 教材学习内容总结 一.定义类: 类定义时使用class关键字 如果要将x绑定到新建的对象上,可以使用"="制定 ...

  4. Java学习笔记之面向对象、static关键字

    一周Java学习总结 今天就总结理清一下关于面向对象和面向过程的程序设计的一些不同特点,以及讲下static关键字. 面向对象 现在接触的Java是面向对象的,现在的程序开发几乎都是以面向对象为基础的 ...

  5. [core java学习笔记][第六章接口与内部类]

    接口域内部类 接口 描述类具有什么功能,不给出具体实现. 内部类 用于设计协作关系的类集合 代理 实现任意接口的对象. 6.1 接口 接口声明 public interface Comparable ...

  6. Java 学习笔记(4)——面向对象

    现在一般的语言都支持面向对象,而java更是将其做到很过分的地步,java是强制使用面向对象的写法,简单的写一个Hello Word都必须使用面向对象,这也是当初我很反感它的一点,当然现在也是很不喜欢 ...

  7. Java学习笔记:03面向对象-接口_多态

    1.类的概念 一堆具有共同的成员变量(属性)和成员方法(功能)对象的集合 2.接口的概念 接口是功能的集合,就是方法的集合 接口中只能定义方法,不能定义普通的成员变量 而且接口中的成员方法,必须是抽象 ...

  8. 疯狂java学习笔记之面向对象(九) - 抽象和接口

    一.抽象(abstract): 1.抽象类: 使用abstract修饰的类就是抽象类; 相比于普通类抽象类增加了支持抽象方法的功能,但也丢失了创建实例的功能(抽象类中不能创建实例),其他普通类有的抽象 ...

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

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

随机推荐

  1. 《重构--改善既有代码的设计》总结or读后感:重构是程序员的本能

    此文写得有点晚,记得去年7月读完的这本书,只是那时没有写文章的意识,也无所谓总结了,现在稍微聊一下吧. 想起写这篇感想,还是前几天看了这么一篇文章 研究发现重构软件并不会改善代码质量 先从一个大家都有 ...

  2. EFCore2.0 Code First基本使用

    前言 在网上找EFCore Code First相关的文章,很多都是基于core 1.0版本的,觉得有必要自己实践下2.0.所以,撸起袖子干吧!~ 1.新建控制台项目(这里就不放图了) 2.打开程序包 ...

  3. 使用.Net Core+EF7 CodeFirst(2)

    上一篇的话,说了下怎么使用EF7 实现 CodeFirst去生成数据库, 其实还有好多问题的,这次一点一点的解决吧,都挺简单,不过零零散散的,, 1.读取配置文件,获得链接字符串 2.使用数据库进行增 ...

  4. 阿里云部署Docker(4)----容器的使用

    通过上一节的学习,我们知道怎样执行docker容器,我们执行了一个普通的,一个后台的,我们还学习了几个指令: docker ps - Lists containers. docker logs - S ...

  5. Scala环境搭建之eclipse

    由于Spark的缘故.我们来看看另外一门语言--Scala,为什么要看这门语言呢?唉~事实上你不看也没关系,仅仅只是spark的内核就是用Scala写的.spark也提供其它语言的编程模型....看自 ...

  6. Cocos2d-x 3.0正式版及android环境搭建

    开发环境是:mac + xcode + eclipse ,在win以下的环境和这个都是一样的,唯一不一样的就是环境变量的配置. 以下主要介绍cocos2d-x环境的设置以及android的环境搭建 1 ...

  7. MPSOC之2——ubuntu环境配置及petalinux安装

    MPSOC的linux开发需要使用petalinux,选择Ubuntu操作系统. 1.Ubuntu 1.1. Ubuntu安装 版本16.04.03 vmare版本:12.0 安装时注意选择" ...

  8. 深入理解计算机系统_3e 第五章家庭作业 CS:APP3e chapter 5 homework

    5.13 A. B. 由浮点数加法的延迟,CPE的下界应该是3. C. 由整数加法的延迟,CPE的下界应该是1. D. 由A中的数据流图,虽然浮点数乘法需要5个周期,但是它没有"数据依赖&q ...

  9. NPOI:创建Workbook和Sheet

    NPOI官方网站:http://npoi.codeplex.com/ 创建Workbook说白了就是创建一个Excel文件,当然在NPOI中更准确的表示是在内存中创建一个Workbook对象流.在看了 ...

  10. (五):C++分布式实时应用框架——支撑复杂的业务通讯关系

    C++分布式实时应用框架--支撑复杂的业务通讯关系 技术交流合作QQ群:436466587 欢迎讨论交流 版权声明:本文版权及所用技术归属smartguys团队所有,对于抄袭,非经同意转载等行为保留法 ...