Java基础系列3——接口

接口:

ActionListener 接口:

有一个方法,且没有方法体
定义: interface /class

  • 1: 接口中所有的属性变量,都默认由static final 关键字修饰
  • 2: 接口中的方法,都默认为没有方法体的方法 ,抽象方法
    • 也可以定义 静态的、默认的方法
    • 格式 : interface 接口名{ }

static:

静态的 、 唯一

  • 修饰 属性: 属性属于类,由类名直接调用,属性只会在内存存在一份
  • 修饰 方法: 类名可以直接调用,不能直接使用本类的成员属性变量

final:

最终形态的 、 不可变

  • 修饰属性: 定义常量
  • 修饰方法: 不能被子类重写
  • 修饰类:不能有子类,不能被继承

实例:

package com.oop.zyf1012;

public class User{
    // 只有一份存在,类名直接调用,值是可以变的
    static int num;
     int n;
    // 必须初始化赋值  之后不能改变值 常量
    final  int id;
    static  int idcount=0;
    {// 初始化 代码块中初始化 常量
        id=idcount++;
    }
//    public User(int id){// 初始化 构造方法中初始化
        this.id=id;
//    }

    // 只存在一份 也不可变
    static  final double PI=3.1415926D;

    String name;


    public static void main(String[] args){
        Math.min (10,20);

        System.out.println (num++);
//        System.out.println (User.name);
        System.out.println (User.num++);
        User user1 = new User();
        User user2 = new User();
        System.out.println (user1.num++);
        System.out.println (user2.num++);
        System.out.println (num);
        System.out.println (user1.n++);
        System.out.println (user2.n++);

        // final 修饰的变量不可以再赋值
//        System.out.println (user1.id++);
//        System.out.println (PI++);
        // id 可以改吗,不能改
        // 每个对象的id不一样,但 id 是常量
        System.out.println (user1.id);
        System.out.println (user2.id);
    }
}

抽象:

  • 抽象方法: 对于行为/功能的抽象

  • 类的方法是具体的:

    • 对于功能的扩展不方便
  • 使用接口:

    • 以接口中的方法作为 功能/行为的模板
    • 在接口的实现类、基于功能方法的模板进行自定义开发功能
  • 示例:买车票: 深圳到北京 是一个抽象行为 ,具体实现从深圳到北京方式以及路线是可以变化的

    • 起始站 目的站 Q
    • A C
      • 火车票
        • A Z C
        • A R F C
        • A F V C
    • 抽象行为定义为接口
    • 每种具体的实现方式 作为接口的实现类

流程:

  • 1:创建一个类实现接口 implements
  • 2: 重写接口中的抽象方法 为实体方法
// 出行的 不同策略 
public interface SZToBJ{
  void  fromSZtoBeiJing();
}
public class User{
  // 由接口作为参数类型 定义一个参数
  public void goBeijing(SZToBJ tobj){
    // 接口变量名调用接口的抽象方法
    tobj.fromSZtoBeiJing ();
  }
}

public class SZToBJ_01 implements SZToBJ{
  // 重写方法
  @Override
  public void fromSZtoBeiJing(){
    System.out.println ("深圳出发");
    System.out.println ("经停拉萨");
    System.out.println ("到达北京");
    System.out.println ("费用:2000");
  }
}

class SZToBJ_02 implements SZToBJ{

  // 重写方法
  @Override
  public void fromSZtoBeiJing(){
    System.out.println ("深圳出发");
    System.out.println ("经停重庆");
    System.out.println ("到达北京");
    System.out.println ("费用:1500");
  }
}
class SZToBJ_03 implements SZToBJ{

  // 重写方法
  @Override
  public void fromSZtoBeiJing(){
    System.out.println ("深圳出发");
    System.out.println ("经停上海");
    System.out.println ("经停杭州");
    System.out.println ("到达北京");
    System.out.println ("费用:2500");
  }
}


class Main{

  public static void main(String[] args){
    // 基于接口 实现了三种方式的实现类 
    SZToBJ_01 tb01=new SZToBJ_01 ();
    SZToBJ_02 tb02=new SZToBJ_02 ();
    SZToBJ_03 tb03=new SZToBJ_03 ();
    // 用户选择其中一种 
    user1.goBeijing (tb02);
    user1.goBeijing (tb01);
  }
}

实例2 :

/**
 * 抽象锁接口
 * - 自己创建一个类,实现接口,从而实现一把具体的锁
 * - Lock 具有对于 开 关 行为的分类 功能
 * - 所有的实现了Lock的实际锁 都是Lock 接口的子类
 */
public interface Lock{
    void lock();
    void unlock();
}


package com.oop.zyf1011;

public class Door{

  Lock lock; // 接口声明对象变量名

  public void open(){
    lock.unlock ();
  }
  public void close(){
    lock.lock ();
  }
}
class DoorManage{

  public static void main(String[] args){
    Door door1 = new Door ();

    // 先给 lock 初始一个具体的锁对象
    // 创建了Lock 接口的子类对象
    FaceIDLock faceIDLock = new FaceIDLock ();
    // 装锁
    door1.lock = faceIDLock;

    door1.open ();
    door1.close ();

    KeyLock keylock = new KeyLock ();
    door1.lock=keylock;

    door1.open ();
    door1.close ();
  }
}

package com.oop.zyf1011;

public class FaceIDLock implements Lock{

  @Override
  public void unlock(){
    System.out.println ("人脸识别正确,解锁 开门 ");
  }

  @Override
  public void lock(){
    System.out.println ("人脸识别正确,上锁 关门");
  }
}

package com.oop.zyf1011;

public class KeyLock implements Lock{

  @Override
  public void unlock(){
    System.out.println ("Key 验证正确,解锁开门!");
  }

  @Override
  public void lock(){
    System.out.println ("Key 验证正确,上锁 关门 ");
  }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值