• 接口


    1.概念

    • 接口可以理解为一种特殊的类,由全局常量和公共的抽象方法组成。
    • 类是一种具体的实现体,而接口则是定义了某一批类所需要遵守的规则,接口不关心这些类的内部数据也不关心这些类内部方法的实现细节,它只规定这些类必须提供某些方法。

    2.关键字

    • 和类定义不同定义接口不使用class关键字,而是用interface关键字。

    3.语法格式

    • [修饰符] abstract interface 接口名 [extends 父接口1,父接口2……]{
      0到多个常量定义;
      0到多个抽象方法的定义;
      }

    【注意:接口是用来被继承、被实现的,修饰符一般使用public】

    4.接口定义

    • 常量:
      接口当中的属性是常量,即public static final修饰属性,即使定义时不添加,系统也会自动添加。

    • 方法:

      • 接口当中的方法只能是抽象方法,使用public abstract修饰,即使定义时不添加,系统也会自动添加。

      • 接口中的方法没有方法体 。

      • 当类实现某个接口时,它必须实现接口中所有的抽象方法,否则这个类必须被定义为抽象类。

      • 接口没有构造方法,不能被实例化,在接口中定义构造方法是非法的。

      • 抽象类中可以没有抽象方法,但包含了抽象方法的类必须被定义为抽象类。

      • 抽象类中可以有非抽象的构造方法,创建子类的实例时可能会调用这些构造方法。

    • 修饰符

      • 抽象类及抽象方法不能被final修饰符修饰。final和abstract 不能连用,同样private和abstract不能连用。

      • 接口中的成员变量默认都是public、static、final类型的,必须被显式初始化。

      • 接口中的方法默认都是public、abstract类型的。

    5.使用接口

    • 一个类可以实现一个或多个接口,实现接口使用implements关键字,java中一个类只能继承一个父类,是不够灵活的通过实现多个接口可以做补充。

    • 继承父类实现接口的语法为:
      [修饰符] class 类名 extends 父类 implements 接口1,接口2……{
      //类题部分,如果继承了抽象类,需要实现继承的抽象方法,要实现接口的抽象方法
      }

    6.代码

    接口

    public interface IPlayGame {
        public void IPlayGame();
    }

    实现接口

    public class Psp implements IPlayGame {
    
        public void IPlayGame() {
            // TODO Auto-generated method stub
            System.out.println("psp具有玩游戏的功能!!");
        }
    
    }

    继承父类实现接口

    public class HuaWei extends Telphone implements IPlayGame{
    
        public void call() {
            // TODO Auto-generated method stub
            System.out.println("可以通过WIFI打电话!");
        }
    
        public void message() {
            // TODO Auto-generated method stub
            System.out.println("可以通过虚拟键盘发短信!");
        }
    
        public void IPlayGame() {
            // TODO Auto-generated method stub
            System.out.println("HuaWei手机可以玩游戏!!");
        }
    
    }

    另一个不需要继承父类的类实现接口

    public class Psp implements IPlayGame {
    
        public void IPlayGame() {
            // TODO Auto-generated method stub
            System.out.println("psp具有玩游戏的功能!!");
        }
    
    }

    测试类

            IPlayGame ipg=new HuaWei();
            ipg.IPlayGame();
            IPlayGame ipg2=new Psp();
            ipg2.IPlayGame();

    结果:

    HuaWei手机可以玩游戏!!
    psp具有玩游戏的功能!!

    7.匿名内部类

    • 定义:在接口的使用过程中,经常与匿名内部类配合使用。
      匿名内部类就是没有名字的内部类,多用于关注实现不关注实现类的名称。

    • 命名格式:
      interface i=new interface(){
      public void method(){
      System.out.println(“匿名内部类的实现方法”);
      }
      };
      i.method();//接口的引用直接调用method方法

    • 代码

    测试类中:
    方法一

            IPlayGame ipg3=new IPlayGame(){
                public void IPlayGame() {
                    // TODO Auto-generated method stub
                    System.out.println("使用匿名内部类的方式实现接口!");
                }
    
            };
            ipg3.IPlayGame();//接口的引用直接调用playgame方法

    方法二(常用这种方式)

            new IPlayGame(){
                public void IPlayGame() {               
                    System.out.println("使用匿名内部类的方式实现接口2!");
                }
            }.IPlayGame();
  • 相关阅读:
    Python-属性描叙符协议ORM实现原理依据- __set__ __get__ __delete__
    Python-类属性查询协议-__getattr__ __getattribute__
    Python-__init__ 和 __new__区别和原理
    Python-在不在判断 in 和 in判断协议- in __contains__
    Python-求序列长度和序列长度协议-len() __len__
    Python-序列反转和序列反转协议-reversed __reversed__
    Python-序列切片原理和切片协议-[start:end:step] __getitem__
    Python-序列常用方法 + * += extend append方法区别
    Python其他数据结构collection模块-namtuple defaultdict deque Queue Counter OrderDict arrary
    Python-函数式编程-map reduce filter lambda 三元表达式 闭包
  • 原文地址:https://www.cnblogs.com/tengpengfei/p/10454064.html
Copyright © 2020-2023  润新知