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("发出红光…………");

}

}

最新文章

  1. javascript中的事件冒泡和事件捕获
  2. EMC与电容(二)-电容参数意义、各电容的特点及应用
  3. 解析大型.NET ERP系统 权限模块设计与实现
  4. “连接配置中心失败,将无法进行正常管理”--腾讯通RTX管理器
  5. SSH登录远程主机执行脚本找不到环境变量
  6. Jquery插件开发学习
  7. BZOJ4350: 括号序列再战猪猪侠
  8. POJ 2105
  9. Spring AOP + AspectJ annotation example
  10. spring mvc 使用及json 日期转换解决方案
  11. Android Fragment基础及使用
  12. (转载)URL与URI的区别
  13. linux下使用crontab实现定时PHP计划任务失败的原因分析
  14. 《高性能MySQL》读书笔记(上)
  15. FSBPM 开发过程中一些提醒备注信息(供参考)
  16. CDN边缘节点容器调度实践(下)
  17. HTML常用知识点代码演示
  18. 如何量化考核技术人的KPI?
  19. 力软开发力软框架力软敏捷开发learun
  20. A1089. Insert or Merge

热门文章

  1. AM3358--Uboot支持LCD输出1024*768
  2. freemarker获取封装类中对象的属性
  3. CF367 E - Working routine
  4. ajax就收data的参数
  5. Dubbo 新编程模型之外部化配置
  6. 【BZOJ1012】【JSOI2008】最大数(线段树)
  7. 小程序 - swiper除了左右切换还有上下滚动超出屏幕的内容
  8. linux jdk 和tomcat环境变量配置
  9. Django入门-基本数据库API
  10. .Net Remoting使用总结