1. 接口

    是特殊的抽象类,纯抽象类---所有方法都是抽象方法

接口和抽象类的区别;

相同点:

  1. 编译后,会分别生成对应的.class文件
  2. 都不能创建对象(实例化),但是可以生成引用(使用多态)

不同点:

  1. 抽象类有构造方法;接口没有构造方法;
  2. 接口中的属性 默认是public static final的(常量);
  3. 接口中的方法 默认是public abstract的。
  1. 定义
    1. 接口的语法:

      修饰符(public/默认) interface 接口名{}

      interface 子接口名 extends 父接口名1,父接口名2,.... {}

    2. 类和接口的关系:
      1. class 实现类名 implements 父接口名1,父接口名2,....{}
    3. 类、类、接口的关系:
      1. class 类名 extends 父类名 implements 父接口名1,父接口名2,....{}
    4. 注意:
      1. 1个类实现父接口,必须实现父接口中的所有方法;除非该类是抽象的;
      2. 实现类在实现父接口的方法 时,方法 的访问修饰符 必须是public的;
      3. 引用类型相互转换时,不论是否实现/继承某个接口,当强转成接口类型时,编译都OK;但 运行时,可能会出现ClassCastException。

package com.lvsling.test;

//接口

public
class TestInterface{

public
static
void main(String[] args){

MyClass m = new MyClass();

Super s = m; //多态(父类的引用
指向
子类的对象)

s.m();

MyClass m2 = (MyClass)s;

m2.m5();

Interface1 i1 = m;

i1.m1();

Interface2 i2 = m;

i2.m2();

Interface3 i3 = m; //多态
父接口的引用
指向
实现类的对象

i3.m3();

Interface4 i4 = m;

i4.m4();

i4.m1();

i4.m2();

}

}

abstract
class Class1{

public
static
final
int
M = 5;

public
abstract
void m1();

}

interface Interface1{

int
M = 5;

void m1();

}

interface Interface2{

void m2();

}

interface Interface3{

void m3();

}

interface Interface4 extends Interface1,Interface2{

void m4();

}

class MyClass extends Super implements Interface3,Interface4{

public
void m1(){}

public
void m2(){}

public
void m3(){}

public
void m4(){}

public
void m5(){}

}

class Super{

public
void m(){}

}

  1. 拓展与提升
    1. 在面向对象中,承在类与类中是单继承,接口与接口之间是多继承关系;类与接口之间是多实现关系。
    2. 接口----是规范,是标准(好处)
      1. 多继承关系
        1. 有了接口,把程序中的主要功能 和 次要功能分开,主要功能 使用单继承的简单性进行重点实现,一旦主要功能实现了 次要功能根据需要 定义在接口中 进行多实现。
      2. 弱耦合性
        1. 接口定义后,把 接口的使用者和实现者 进行了分离,借助 多态 降低了程序间的耦合性。
        2. 接口回调:接口定义后,先定义接口的使用者 后定义接口的实现者。

package com.lvsling.test;

public
class TestLamp {

public
static
void main(String[] args){

Lamp lamp = new Lamp();

//红灯泡使用

RedLight redLight = new RedLight();

lamp.setLight(redLight);

lamp.on();

}

}

// 标准-接口

interface Light{

void shine();

}

// 台灯--标准的使用者

class Lamp{

// 灯口--用标准

private Light light;

// 开

public
void on(){

light.shine();

}

// get/set

public Light getLight(){

return
this.light;

}

public
void setLight(Light light){

this.light = light;

}

}

// 红灯泡--标准的实现者

class RedLight implements Light{

public
void shine(){

System.out.println("发出红光…………");

}

}

java基础笔记(8)----接口的更多相关文章

  1. Java基础笔记 – Annotation注解的介绍和使用 自定义注解

    Java基础笔记 – Annotation注解的介绍和使用 自定义注解 本文由arthinking发表于5年前 | Java基础 | 评论数 7 |  被围观 25,969 views+ 1.Anno ...

  2. 【转】Java基础笔记 – 枚举类型的使用介绍和静态导入--不错

    原文网址:http://www.itzhai.com/java-based-notes-introduction-and-use-of-an-enumeration-type-static-impor ...

  3. Java基础-通过POI接口处理xls

    Java基础-通过POI接口处理xls 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.

  4. Java基础-Collection子接口之Set接口

    Java基础-Collection子接口之Set接口 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 学习Collection接口时,记得Collection中可以存放重复元素,也可 ...

  5. Java基础-Collection子接口之List接口

    Java基础-Collection子接口之List接口 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 我们掌握了Collection接口的使用后,再来看看Collection接口中 ...

  6. 《Java基础——抽象与接口》

    Java基础--抽象与接口       一.抽象: 规则: 关键字 abstract 修饰的类称为抽象类. 子类通过关键字extends实现继承. 关键字 abstract 修饰的方法称为抽象方法,抽 ...

  7. 黑马程序员----java基础笔记中(毕向东)

    <p>------<a href="http://www.itheima.com" target="blank">Java培训.Andr ...

  8. 黑马程序员----java基础笔记上(毕向东)

    ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 笔记一共记录了毕向东的java基础的25天课程,分上.中.下 本片为上篇,涵盖前10天课程 1. ...

  9. Java 基础三、接口与内部类

    1.   在Java程序语言中,接口是对类的一种描述.例如Arrays类中sort方法声明可以对对象进行排序,但前提是对象所属的类必须实现Comparable接口. public interface ...

  10. Java基础笔记1

    java (开源,跨操作系统)j2ee jre java基础 javaoop java高级 JDK(JAVA developer Kitool): java开发工具 (开发人员使用) JRE(java ...

随机推荐

  1. 错误代码: 1052 Column 'stu_id' in field list is ambiguous

    1.错误描述 1 queries executed, 0 success, 1 errors, 0 warnings 查询:select stu_id, (SELECT stu_name FROM t ...

  2. Java Web项目缺少jsp、servlet jar包

    1.错误描述  Caused by:java.lang.ClassNotFoundException:javax.servlet.jsp.PageContent 2.错误原因      缺少有关的js ...

  3. com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxError Exception

    1.错误描述 com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxError Exception:You have an error in your SQL synt ...

  4. faultString = "java.lang.NullPointerException : null"

    1.错误描述 (mx.messaging.messages::ErrorMessage)#0 body = (null) clientId = "E75F6AF8-5E0E-4184-3AF ...

  5. .Net Core 1.0升级2.0(xproj项目迁移到.csproj )

    vs2015的创建的项目是以*.xproj的项目文件,迁移到vs2017需要如下准备: 1.安装好vs2017(废话) 2.下载最新的SDK和 .NET Core 2.0 Preview 1 Runt ...

  6. P1141 01迷宫

    https://www.luogu.org/problemnew/show/P1141 题目描述 有一个仅由数字0与1组成的n×n格迷宫.若你位于一格0上,那么你可以移动到相邻4格中的某一格1上,同样 ...

  7. Windows Server 2012 R2 官方原版镜像

    微软操作系统 Windows Server 2012 R2 官方原版镜像 Windows Server 2012 R2 是由微软公司(Microsoft)设计开发的新一代的服务器专属操作系统,其核心版 ...

  8. RobotFramework自动化测试框架的基础关键字(二)

    1.1.1        如何快速查询某一个关键字的API说明 鼠标选中我们关键字,同时按住Ctrl+Alt键,即可出来该关键字的帮助API以及使用示例 1.1.2        如何快速补全关键字 ...

  9. 【Luogu1291】百事世界杯之旅(动态规划,数学期望)

    [Luogu1291]百事世界杯之旅(动态规划,数学期望) 题面 洛谷 题解 设\(f[i]\)表示已经集齐了\(i\)个名字的期望 现在有两种方法: 先说我自己的: \[f[i]=f[i-1]+1+ ...

  10. 分享一下我进入IT行业的经历

    今天突然根想写博客,就注册了一个,分享一下我的成长经历. 我第一次接触编程的时候是在上大学的时候,我学的专业是工程测量接触的第一个语言是vb,我记得很清楚,我当时写出第一个小Demo是的心情,感觉到了 ...