package com.day29.test;
public class Test { public static void main(String[] args) { System.out.println("接口"); // 有的时候要多继承父类 // 但是java只支持单继承 // 所以有了接口 就可以实现 多继承这个状态 // 但是接口 子类 不能叫继承接口 而是叫 实现接口 //而他们之间不是子父的关系 // 而是有一些共同特征 // 例如 鼠标 键盘 打印机 等等 都支持USB链接 // 接口是一种规范 定义的是一种规则 // 体现了现实世界中 如果你是 ... 则必须能...的思想 // 继承是一个是不是的关系 而接口实现则是 能不能的关系 // 接口本质是锲约 标准 规范 就像我们的法律一样 // 制定好后大家都要遵守 // 接口 举例 // 可以飞 攻击性 // // 飞机 子弹 风筝 热气球 这些都可以飞 // 但是 子弹 既可以飞 也有攻击性 // 接口的扩展性更强 //测试接口的功能 Plane plane=new Plane(); plane.fly(); } }
//接口的定义 //1. 接口 使用 interface 定义 // 2.接口和类是并列的结构
//3.如何定义接口 : 定义接口的成员 // JDK7 及以前 : // 只能够定义全局常量和 抽象方法 // 全局常量 public static final // 抽象方法: public abstract // JDK8 : 除了够定义全局常量和 抽象方法 还可以定义静态方法和默认方法
//4. 接口中是不可以定义构造器 意味着接口不能实例化
//5. 在java开发中 让类实现接口里的方法 使用关键字 implements 建立关系 // 如果实现类覆盖了接口中的所有抽象方法 则此类可以实例化 // 如果实现类中没有覆盖了接口中的抽象方法 此类必须定义为抽象类 abstract // 对于实现类中与接口建立关系后 实现类中实现接口中的方法 // 我们更习惯叫他 '实现方法' // 对于继承了抽象类 子类去实现抽象类中的抽象方法 // 我们一般叫做 '重写方法'
// 6. java 类中可以实现多个接口 弥补了 java的单继承的局限性 :下面 子弹类 举例说明
// 7. 接口和接口之间可以继承 而且可以多继承 // 类与类之间 叫做 继承 // 类与接口之间 叫做 实现 // 接口与接口之间 叫做 继承 // ******************************** // 8. 接口的具体使用 体现了多态性 // 9. 接口 实际可以看作一种规范 // // 经典面试题: 抽象类与接口有哪些异同? //
interface Flyable{ //全局常量 // 在接口定义中 public static final 这些可以省略 // 默认是存在的 public static final int MAX_SPEED=7900; //第一宇宙速度 public static final int MIX_SPEED=1; //抽象方法 public abstract void fly(); // 在接口定义方法 public abstract 也可以省略 public abstract void stop(); } //攻击性的类 interface Attackable{ void attack(); }
//子弹类 实现了多个接口 //如果又有继承 又有实现接口 // 写法 先继承 后 实现这中 class Bullet extends Object implements Flyable,Attackable{
@Override public void attack() { // TODO Auto-generated method stub System.out.println("攻击"); }
@Override public void fly() { // TODO Auto-generated method stub System.out.println("飞"); }
@Override public void stop() { // TODO Auto-generated method stub System.out.println("停止"); } } //飞机类 class Plane implements Flyable{
//对于实现类中与接口建立关系后 实现类中实现接口中的方法 // 我们更习惯叫他 实现方法 // 对于继承了抽象类 子类去实现抽象类中的抽象方法 // 我们一般叫做 重写方法 @Override public void fly() { // TODO Auto-generated method stub System.out.println("通过引擎起飞"); }
@Override public void stop() { // TODO Auto-generated method stub System.out.println("驾驶员 减速停止"); } }
//**********************
interface aa{ }
interface bb{ } //cc 多继承了 aa ,bb interface cc extends aa,bb{ }
//为什么 要使用 接口这种规范来是设计程序
//例如 //现在java 去操作数据库 //数据库种类有 mysql oracle sqlserver 等等 //在没有接口这种规范的时候 //实际 Java 可以之间操作 mysql 或者是 oracle //如果 mysql 和 oracle 实现增删改查的方式不同 或者实现的方法名不同 //比如 //mysql 实现插入数据操作方法 叫做 add //oracle 实现插入数据操作 叫做方法 insert //这样对于我们程序员来说 // 如果今天你要去操作 mysql 你要去学习 mysql中的方法 // 如果明天你要去操作 oracle 你就要去学习oracle中的方法 // 这样会非常的累 而且不好记住 // 所以在程序设计的时候 JAVA大神们就会利用 接口这种规范和面向对象的多态性 // 把JAVA 去往各种数据库路上 架起了一个 桥梁(JDBC) 他们去定义数据库的规范 // 然后数据库实现类 必须遵循这个规范来开发具体实现的方法 // 程序员在调用数据库就不必考虑到底是mysql 或者是oracle // 程序员直接在这个桥梁上按照规范调用方法 即可实现各种数据库的操作 // 这样对于调用数据库操作 大家只用记住接口定义的方法即可 // 无需再去一一学习底层数据库的操作 大大提高了开发效率 // java -> JDBC(这里封装了各种数据库操作的接口)-> oracle/ mysql /sqlserver // 数据库类中实现操作数据库的方法 必须按照接口的规范开发
// (在定义规范的时候不清楚mysql/oracle 具体实现的逻辑 所以只能定义抽象方法 具体的实现通过‘数据库实现类’来实现 ) [多态的体现] // (我把规矩定在这边,在这里操作 必须都要遵守我的规范 ) // (比如方法名 我规范 使用‘add’单词 命名插入操作) // (所有数据库实现具体方法必须都要按照我的规范声明)
// 在开发中体会 面向接口编程的思想