Java -OOP - Interface

接口

  • 接口: interface

    • 监听器都是接口
    • 格式: public interface 接口名
  • 接口与类

  • 类: 属性 方法

  • 接口:

    • 属性:

      • 默认:final(最终的-不可变) 常量
      •  static(静态的 - 唯一) 属于类 直接由类名调用 
        
    • 方法:抽象方法
      接口中的方法没有方法体

package com.draw.zyf1229;

public interface InterfaceTest{
    /**
     *   ERR: Variable 'name' might not have been initialized
     *   默认: 1:final 常量
     *         2: static 静态的
      */
    static  final String NAME="";
    int age=20;

    /**
     * ERR: Interface abstract methods cannot have body
     * 接口中的方法没有方法体
     */
    public abstract void read();


}


  • 接口不能直接创建对象
  • 接口还是可以作为一种类型存在 可以声明但是不创建对象
    • 作为属性类型 参数类型 返回值类型

使用接口:

  • 关键字: implements 实现
    • 一个类去继承一个接口 并实现接口的方法
    • 创建一个类 实现 接口
    • 重写接口中所有的方法

具体应用: 监听器

  • 为什么需要使用接口?
    • 点击按钮之后的动作,在你写按钮这个类的时候不明确
    • JButton 被点击动作发生时 之后 需要调用第三方使用者想要执行的代码
  • 抽象:
    • 类: 相对于对象抽象

      • 类的方法是具体
      • 类是不完全抽象的
    • 遇到一些行为功能需要抽象化处理时,类就很难做到了

动物类: 吃:
老虎: 吃 肉
昆虫: 吃 树叶
植物类:
食人花:吃 昆虫

有吃这个行为的:
所有有吃这个行为的都来实现吃这个接口 重写接口中吃的方法(强制)

类- 接口=完成对一类事物的属性以及行为 抽象

买票:

路径选择:
长沙 -- 北京 :
飞机:
直达: CS - BJ
转成: CS - GZ - CD - ZZ - BJ

package com.draw.zyf1229;

public class ClassTest{
    /**
     * Variable 'name' might not have been initialized
     */
    static final String NAME = "";
    int age;
    static int num = 100;

    /**
     * ERR: 'InterfaceTest' is abstract; cannot be instantiated
     * instantiated: 实例化对象
     */
//    InterfaceTest ift=new InterfaceTest();
    InterfaceTest ift;

    public void userRead(InterfaceTest ift){
        this.ift = ift;
    }

    public static void main(String[] args){
        // 由static 修饰的变量方法可以在static 方法中调用
        ClassTest ct = new ClassTest ();
        ct.num = 300;
        ct.age = 20;

        ClassTest.num = 200;
        ClassTest ct1 = new ClassTest ();
        ct1.num = 600;
        ct1.age = 30;

        System.out.println ("ct:" + ct.age);
        System.out.println ("ct1:" + ct1.age);

        System.out.println (num);
        System.out.println (ct.num);
        System.out.println (ClassTest.num);
    }

}

interface ToBj{

    void cstobj();

}

class CS_TO_BJ{

    /**
     * 声明去北京的属性变量名
     */
    ToBj tobj; // 接下来要赋值为接口的实现类对象

    /**
     * 调用接口设定的方法
     */
    public void csTobj(){
        tobj.cstobj ();
    }


//    public void csTobj(){
//        System.out.println ("长沙---西安");
//        System.out.println ("西安---郑州");
//        System.out.println ("郑州---北京");
//    }


    public static void main(String[] args){
        CS_TO_BJ ctb = new CS_TO_BJ ();
        // 先确定策略
        ctb.tobj = new ToBJ_01 ();
        ctb.csTobj ();

        ctb.tobj = new ToBJ_02 ();
        ctb.csTobj ();

        ctb.tobj = new ToBJ_03 ();
        ctb.csTobj ();
    }


}

/**
 * 去北京的不同方式的实现
 */
class ToBJ_01 implements ToBj{

    @Override
    public void cstobj(){
        System.out.println ("长沙---西安");
        System.out.println ("西安---北京");
    }
}

class ToBJ_02 implements ToBj{

    @Override
    public void cstobj(){
        System.out.println ("长沙---郑州");
        System.out.println ("郑州---北京");
    }
}

class ToBJ_03 implements ToBj{

    @Override
    public void cstobj(){
        System.out.println ("长沙---北京");
    }
}


posted @ 2022-01-07 16:03  30%privatetoobject  阅读(17)  评论(0)    收藏  举报