接口 内部类 常用API | 学习日志 Java 7 月 28 日 | 第 6 天

        学习计划

        1.接口
        2.内部类
        3.常用API

        接口

        1.概述

 接口,就是一种规则。用关键字interface,public interface E{}。

        接口不能实例化。接口和类之间是实现关系,通过implements表示,可以单实现也可以多实现,public class 类 implements 接口1,接口2{}。

        实现类还可以继承一个类的同时实现多个接口,public class 类 extends 父类 implements 接口1,接口2{}。

        接口的子类要么重写所有抽象方法,要么是抽象类。

        接口的成员变量,只能是常量,默认修饰符:public static(方便直接用类访问) final(常量无法修改)。

        接口没有构造方法。

        接口的成员方法只能是抽象方法,默认修饰符:public abstract

        接口和接口之间是继承关系,可以单继承也可以多继承,如果实现类实现了最下面的子接口那么要重写所有抽象方法。

        多个接口有重名的方法,只需要重写一次。

        public void function(interfaceE e){},这样传递接口参数(实现类对象c,方法编译看左边运行看右边)相当于实现了 interfaceE e = new 实现类对象();

        2.接口新添加的方法

        接口中默认方法定义格式:

        public default E function(){}

        默认方法不是抽象方法,所以不强制被重写,但是如果被重写,重写时需要在子类中去掉default关键字。public可以省略,default不行。如果实现多个接口,多个接口中存在相同名字的默认方法,子类就必须对该方法进行重写。

        接口中静态方法定义格式:

        public static E function(){}

        静态方法只能通过接口名调用,不能通过实现类名或者对象调用,public可以省略,static不可以省略。

        3.JDK9新增的私有方法

        private E function(){},为接口中默认方法服务。

        private static E function(){},为接口中静态方法服务。、

        4.适配器设计模式

        当一个接口中抽象方法过多,但我只要使用其中一部分时可以使用,中间编写一个类,将该类实现对用的接口,但对接口中的抽象方法只做空实现,在让另一个类继承这个中间类,并重写需要的方法,一般中间类用abstract修饰为抽象类避免其他类创建适配器类的对象。


        1.内部类

        类的的五大成员:属性,方法,构造方法,代码块,内部类。

        写在一个类里面的就叫做内部类,某一类表示的事物是另一个类的一部分,且单独存在没有意义,可以把这个类定义为内部类。

        2.成员内部类

        可以用private,protected,public修饰。

        直接创建方式 Outer.Inner e = new Outer().new Inner();当成员内部类被非私有修饰时,直接创建对象。

        使用这种方式创建会在堆内存里开辟的外部类对象和内部类对象的空间,内部类对象空间里存放外部类的地址Other.this。使用Other.this可以在内部类访问外部类的成员

        内部类修饰为private可以在外部类编写方法对,对外提供内部类对象,public Inner getInstance(){ return new Inner();}

        3.静态内部类

        静态内部类只能访问外部类中的静态变量和静态方法,如果想要访问非静态的需要创建对象。

        创建静态内部类对象:Outer.Inner e = new Outer.Inner();由于是静态所以访问采取类名直接访问,只需创建内部类对象。

        调用静态方法:Outer.Inner.function();由于方法也是静态也不需要创建内部类对象直接使用类名访问。

        4.局部内部类

        将内部类定义在方法里面就叫做局部内部类,类似于方法里面的局部变量。

        外界是无法直接使用局部内部类,需要在方法内创建对象使用。

        该类可以直接访问外部类的成员,也可以访问方法类的局部变量。

        5.匿名内部类

        这样的匿名类完成了创建继承People类重写虚方法的没有名字的类的对象

new People() {
    @Override
    public void talk() {
    sout("重写虚方法");
    }
}

        这样的匿名类完成了创建实现Learn接口重写虚方法的没有名字的类的对象

new Learn() {
    @Override
    public void learn() {
    sout("重写虚方法");
    }
}

        当方法的参数是接口(或者类)时,可以传递这个接口的实现类对象(没有名字的实现类只有类体)。如果实现类只要使用一次,就可以匿名内部类简化代码。下图代码完成了传递子类对象实现了多态。

public satic void method(People a) {
    a.paly();
}

method(

    new People() {
        @Override
        public void play() {
        sout("打CS");
        }
    }

);

        下面的代码实现了接口的多态,编译看左边,运行看右边。

Learn l = new Learn() {
    @Override
    public void learn() {
    sout("重写虚方法");
    }
};
l.learn();

        既然是创建了对象也可以直接调用方法.

new Learn() {
    @Override
    public void learn() {
    sout("重写虚方法");
    }
}.learm();

        总结,匿名内部类是隐藏了名字的内部类,可以写在成员位置,也可以写在局部位置。匿名内部类创建包含了三个部分:继承或实现,方法重写,创建对象。整体就是一个类(接口)的子类对象(实现类对象)。当方法的参数是接口(或者类)时,可以传递这个接口的实现类对象(没有名字的实现类只有类体)。如果实现类只要使用一次,就可以匿名内部类简化代码。


        常用API(Application Programming Interface)

        API(Application Programming Interface,应用程序编程接口)是一组预定义的规则和协议,允许不同软件系统之间进行通信和交互。它定义了如何请求服务、传递数据以及处理响应,使得开发者无需了解底层实现细节即可集成功能。

        1.Math

        帮助我们进行数学计算的工具,其中所有方法都是静态的,如Math.sqrt(4);对4开根。Math.pow(7,4);求7的四次方。

        2.System

        时间原点:1970年1月1日00:00:00,我国在东八区,有8小时时差。

        exit停止虚拟机,currentTimeMillis:获取当前时间的毫秒值,arraycopy:拷贝数组。

        

        

        

        

你可能感兴趣的:(学习)