• 面向对象第五天---三大特性之多态之接口


    一、什么是接口

    1、接口时一套标准化的协议(必须要配套使用)。

    2、接口的作用是:做数据交换

    3、接口的关键字是:interface

    语法: [访问修饰符] 关键字interface 接口名{

    接口里面的属性都是 pubic static final 默认修饰的常量

    接口里面的方法默认都是 public 抽象关键字abstract 修饰的方法();

    }


    使用:格式如:public class 类名 implements 接口名1,接口名2{};

    4、接口是让别的类用来调用的,所以通常接口的访问修饰符是public。接口如果不写访问修饰符,其默认是public

    5、接口是抽象访问和常量值定义的集合(接口中的方法必须是抽象方法,接口定义的属性必须是常量)

    (1)接口中的方法默认访问修饰符是public,并且是通过abstract进行修饰的抽象方法

    (2)接口中属性是公共静态的常量,即接口中定义的属性都会默认加上 public stati final 作为前缀

    6、接口可以看作特殊的抽象类,只不过这个抽象类中全部都是公共的静态常量,都是公共的抽象方法,比抽象类更加标准

    7、jdk1.8之后的版本接口里面是允许定义static修饰的方法、允许定义default修饰的方法

    8、一个类可以实现多个接口,若两个接口里有default修饰的相同方法名的方法,此时实现类必须得覆写default修饰的方法


    二、接口的特性

    1、实现接口的类必须实现接口中的抽象方法

    2、多个类可以实现同一个接口

    3、实现了接口的类可以被继承

    4、接口和接口之间是可以多继承的。

    5、接口和实现类的多态性:
    6、接口和抽象类都遵循开闭原则(对修改关闭,对扩展开放)

    三、接口和抽象类的区别

    1、相同点:

    (1)接口和抽象类都不能直接实例化,抽象类如果需要实例需要被继承,之后通过抽象类的引用指向子类的实例对象(变相的创建了实例对象)

    (2)抽象类里的抽象方法必须全部被子类实现,如果子类不能全部实现父类的抽象方法,那么该子类只能是抽象类;一个类实现接口的时候,如果不能全部实现接口中的方法,那么这个类只能是抽象类。

    (3)接口和抽象类都是用来抽象具体对象的,但是接口的抽象级别更高

    (4)接口和抽象类都遵循开闭原则(对修改关闭,对扩展开放)

    2、不同点:

    (1)抽象类要被子类继承;接口要被类实现

    (2)抽象类中可以有非抽象方法;接口中除了static和default修饰的方法,其他全为抽象方法

    (3)抽象类中可以有普通成员变量;接口中只能定义公共静态常量

    (4)抽象类是重构的结果;接口是设计的结果

    (5)抽象类只可单继承;接口可以多继承

    (6)抽象类可以有构造方法;接口不可以有构造方法


    四、接口回调

    1、接口回调是在开发中一种常用的设计手段,也可以当作一个处理问题的模型。运行接口的实现类实例的对象可以用接口类型的引用接收,调用时,用接口类型的引用名.方法名可以调用实现类中覆写过的接口中的方法。这种方式叫做接口回调。

    2、应用场景:分层间的互相协作

    五、内部类

    1、Java中支持一个类在一个类的内部再定义一个类,我们称定义在一个类中的类为内部类或成员内部类(Inner Class)。

    2、成员内部类

    (1)成员内部类可以访问外部类的所有成员变量和方法

    (2)内部类属于类,需要通过 类名.内部类 的方式得到这个类。

    (3)成员内部类的创建方式

    创建外部类的实例对象-->通过外部类访问内部类创建内部的实例对象

    InnerClass outClass = new InnerClass();

    InnerClass.InnerClass1 b = outClass.new InnerClass1();

    其中new InnerClass1() 是outClass类中的构造方法

    (4)成员内部类是依附于外部类而存在的。如果要创建成员内部类对象,则必须得有一个外部类对象。

    (5)成员内部类属于外部类的成员,可以用priate修饰,但是只能在外部类内部进行访问。修饰符对成员内部类的作用与普通的成员方法作用范围相同。


    3、局部内部类

    (1)定义在一个方法或者一个作用域里面的类,它和成员内部类的区别是:局部内部类的访问权限仅限于方法或者作用域内

    (2)局部内部类的访问修饰符不能是public、protected、default、private 修饰的,也不能用static进行修饰

    (3)局部内部类创建对象时,要放在局部内部类加载完之后(因为代码的执行时从上到下的)

    4、匿名内部类(重点:必须掌握)

    (1)匿名内部类使用最多的场景时做事件监听,使用匿名内部类可以使我们的代码可维护性更高

    (2)匿名内部类没有引用指向,和匿名对象一样只能使用一次

    (3)可以实现抽象类里的抽象方法

    (4)接口也可以使用匿名内部类的方式去实现

    (5)匿名内部类被我们大量使用在多线程中,因为我们线程实现的方式有继承Thread类和实现Runnable接口两种

    (6)格式: new 类名/接口/抽象类(){

    }

    (7)本质:匿名内部类会隐式的继承一个类或者实现一个接口,或者说,匿名内部类是一个继承了该类或者实现了该类接口的子类匿名对象。

    5、静态内部类(重点:必须掌握)

    (1)静态内部类不依赖外部类

    (2)静态内部类创建对象

    外部类.静态内部类 引用名 = new 静态内部列构造器();

    (3)静态内部类中不能使用外部类中非static修饰的成员变量和方法。

  • 相关阅读:
    C语言博客作业01分支、顺序结构
    vue学习日记04
    vue学习日记01
    vue学习日记05
    vue学习日记02
    企业微信小程序注册遇到的一些事
    vue学习日记03
    Unix/Linux系统编程第十三章学习笔记
    OpenEuler 中C与汇编的混合编程(选做)
    《Unix/Linux系统编程》第五章学习笔记
  • 原文地址:https://www.cnblogs.com/JQbiu/p/10801899.html
Copyright © 2020-2023  润新知