栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

JAVA 学习笔记6 接口+内部类

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

JAVA 学习笔记6 接口+内部类

文章目录
    • 接口(interface)
    • 内部类
      • 局部内部类
      • 匿名内部类(用的最频繁)
      • 成员内部类
      • 静态内部类

接口(interface)

接口(特殊的抽象)就是给出一些没有实现的方法,封装到一起,到某个类到使用的时候,再根据具体情况把这些方法发写出来

  • 语法:

    interface 接口名{
      //属性
      //方法(1. 抽象方法 2.默认实现方法 3.静态方法)
    }
    class 类名 implements 接口{
      自己属性;
      自己方法;
      必须实现的接口的抽象方法
    }
    
  • 如果一个类implements(实现)接口,需要将该接口的所有抽象方法都实现

  • 接口不能被实例化,不能被使用

  • 接口中所有的方法都是public方法,接口中抽象方法,可以不用abstract修饰

  • 一个普通类实现接口,就必须将该接口的所有方法都实现

  • 抽象类实现接口时,可以不用实现接口的方法

  • 一个类可以同时实现多个接口

  • 接口中的属性,只能是final,而且是public static final修饰符

    • 比如 int a=1;实际上是 public static final int a=1;
  • 接口中属性的访问形式:接口名.属性名

  • 一个接口不能继承其他的类,但是可以继承多个别的接口

  • 接口的修饰符只能是public和默认(和类的修饰符一样)

  • 接口与继承

    • 继承满足is-a关系,接口只需满足like-a关系
    • 当子类继承了父类,就自动的拥有父类的功能
    • 如果子类需要拓展功能,可以通过实现接口的方式拓展
    • 可以理解实现接口是对java单继承机制的一种补充
  • 接口在一定程度上实现代码解耦(即接口规范性+动态绑定)

内部类

类的五大成员

  • 属性
  • 方法
  • 构造器
  • 代码块
  • 内部类

一个类的内部又完整的嵌套了另一个类结构,被嵌套的类称他为内部类,嵌套其他类的类称为外部类

  • 最大特点:可以直接访问私有属性,并且可以体现类与类之间的包含关系

  • 语法:

    class Outer{//外部类
      class Inner{//内部类
    
      }
    }
    class Other{//外部其他类
    }
    
  • 内部类的四种分类:

    • 定义在外部类局部位置上(比如方法内)
      • 局部内部类(有类名)
      • 匿名内部类(没有类名)
    • 定义在外部类的成员位置上(本质就是一个成员):
      • 成员内部类(没有static修饰)
      • 静态内部类(使用static修饰)
局部内部类

局部内部类:是定义在外部类的局部位置,比如方法中,并且有类名

  • 语法

        final class Inner{//局部内部类
          类体
      }
    
  • 本质仍然是类

  • 局部内部类可以直接访问外部类的所有成员,包含私有的

    • 局部内部类访问外部类成员是直接访问
    • 外部类访问局部内部类成员是:先创建对象,再访问(必须在作用域内)
    • 外部其他类不能访问局部内部类,因为局部内部类的地位是一个局部变量
  • 不能添加访问修饰符,因为他的地位就是一个局部变量,局部变量是不能使用修饰符的,但是可以使用final修饰,因为局部变量也可以使用final

  • 作用域仅仅在定义它的方法或代码块中

  • 局部内部类定义在方法/代码块中

  • 作用域在方法体或者代码块中

  • 如果外部类和局部内部类的成员重名时,默认遵循就近原则,如果想访问外部类的成员,则可以使用(外部类名.this.成员)去访问

匿名内部类(用的最频繁)

匿名内部类:定义在外部类的局部位置,比如方法中,并且没有类名

  • 语法

    new 类或接口(参数列表){
      类体
    };
    
  • 本质仍然是类,内部类,且没有名字,同时还是一个对象

  • 匿名内部类使用一次,就不能再使用,不过其对象(shower)可以反反复使用

  • 基于接口的匿名内部类

  • 基于类的匿名内部类

  • 不能添加访问修饰符,因为他的地位是一个局部变量

  • 作用域:仅仅在定义他的方法或者代码块中

  • 匿名内部类既是一个类的定义,同时也是一个对象(之前有new)

    • 可以最直接访问外部类的所有成员,包括私有的
    • 匿名内部类访问外部类成员直接访问
    • 外部其他类不能访问匿名内部类
  • 如果外部类和局部内部类的成员重名时,默认遵循就近原则,如果想访问外部类的成员,则可以使用(外部类名.this.成员)去访问(与局部内部类有共同之处)

成员内部类

成员内部类时定义在外部类的成员位置,并且没有static修饰

  • 语法:

      访问修饰符 class Inner{//静态内部类
          
      }
    
  • 可以直接访问外部类的所有成员,包含私有的

    • 成员内部类访问外部类成员是直接访问
    • 外部类访问成员内部类是先创建对象,再访问
    • 外部其他类也可以访问成员内部类
  • 可以添加任意访问修饰符(public、protected、默认、private),因为他的地位就是一个成员

  • 如果外部类和局部内部类的成员重名时,默认遵循就近原则,如果想访问外部类的成员,则可以使用(外部类名.this.成员)去访问(与局部内部类有共同之处)

静态内部类

静态内部类:是定义在外部类的成员位置,并且有static修饰

  • 语法

      访问修饰符 static class 类{//静态内部类
          类体
      }
    
  • 可以直接访问外部类大的所有静态成员,包含私有的,但不能直接访问非静态成员

    • 静态内部类访问外部类是直接访问
    • 外部类访问静态内部类是先创建对象再访问
    • 外部其他类也可以访问静态内部类
  • 可以添加任意访问修饰符(public、protected、默认、private),因为他的地位就是一个成员

  • 作用域:同其他的成员,为整个类体

  • 如果外部类和局部内部类的成员重名时,默认遵循就近原则,如果想访问外部类的成员,则可以使用(外部类名.成员)去访问(因为其实静态的成员,因此不能像之前的内部类一样用this关键字)

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/881364.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号