首页 > 编程语言 >Java基础复习——内部类

Java基础复习——内部类

时间:2023-07-01 10:12:30浏览次数:47  
标签:部类 Java 复习 -- 访问 Inner Outer 内部

内部类

什么是内部类?

  • 一个类中又完整的嵌套了另一个类结构。被嵌套的类称为内部类(inner class),嵌套其他类的类称为外部类(outer class)。
  • 内部类的最大特点:可以直接访问私有属性,并且可以体现类与类之间的包含关系。

为什么使用内部类

  • 内部类方法可以访问该类定义所在的作用域中的数据,包括私有的数据
  • 内部类可以对同一包中的其他类隐藏起来
  • 当想要定义一个回调函数且不想编写大量代码是,使用匿名内部类比较便捷

基本语法:

class Outer {	// 外部类
    class Inner{	// 内部类
        
    }
}

class Other {	// 外部其他类
    
}

​ 类的五大成员:

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

内部类的分类

定义在外部类的局部位置上(如方法内):

  • 局部内部类

  • 匿名内部类

定义在外部类的成员位置上:

  • 成员内部类

  • 静态内部类

局部内部类

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

基本语法:

class Outer {
    public void m1() {
        class Inner {
           类体
        }
    }
}

细节

  1. 可以直接放问外部类的所有成员,包括私有的
  2. 不能添加访问修饰符,地位等同于局部变量,可以用 final 修饰
  3. 作用域:仅仅在定义它的方法或者代码块中
  4. 局部内部类---访问--->外部类的成员【访问方式:直接访问】
  5. 外部类访问---访问--->局部内部类的成员 【访问方式:创建对象,在访问(注意,必须在作用域内)】
  6. 外部其他类---不能访问--->局部内部类(地位等同于局部变量)
  7. 如果外部类和局部内部类的成员重名是,默认遵循就近原则,如果想访问外部类的成员,则可以使用【外部类名.this.成员】去访问。

匿名内部类

说明:匿名内部类是定义在外部类的局部位置,比如方法中,并且没有类名 (底层是有类名的,例如Outer$1,Outer$2 ……)

基本语法:

class Outer {
    pubic void m1() {
        new 类或接口(参数列表){
    类体
};
    }
}

细节

  1. 匿名内部类既是一个类的定义,同时本身也是一个对象。一次从语法上看,既有定义类的特征,创建对象的特征
  2. 可以直接访问外部类的所有成员,包括私有的
  3. 不能添加访问修饰符,因为地位等同局部变量
  4. 作用域:仅仅在定义它的方法或代码块中
  5. 匿名内部类--访问-->外部类成员 【访问方式:直接访问】
  6. 外部其他类--不能访问-->匿名内部类(因为匿名内部类地位等同于一个局部变量)
  7. 如果外部类和匿名内部类的成员重时,匿名内部类访问,默认遵循就近原则,如果想访问外部类的成员,则可以使用【外部类名.this.成员】去访问
  8. 可以当作实参直接传递,简洁高效

成员内部类

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

class Outer {
    class Inner {
        类体
    }
}

细节:

  1. 可以直接访问外部类的所有成员,包含私有的

  2. 可以添加任意访问修饰符,应为它的地位就是一个成员

  3. 作用域和其他的外部类成员一样,为整个类体

  4. 成员内部类--访问-->外部类(比如属性),【访问方式:直接访问】

  5. 外部类--访问-->内部类,【访问方式:创建对象,再访问】

  6. 外部其他类--访问-->成员内部类

    // 第一种方式
    Outer.Inner outerInner = outer.new Inner(); 
    // 第二种方法,在外部类中,编写一个方法,可以返回 这个内部类对象 getInnerInstance()
            Outer.Inner innerInstance = outer.getInnerInstance();
    
    Class Inner {
        public Inner getInnerInstance() {
            return new Inner();
        }
    
    }
      // 第三种方式(其实和第一种一样)
            new Outer().new Inner();
    
    

    静态内部类

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

    class Outer {
        static class Inner {
            
        }
    }
    
    1. 可以直接访问外部类的所有静态成员,包含私有的,但不能直接访问非静态成员

    2. 可以添加任意访问修饰符,应为它的地位就是一个成员

    3. 作用域和其他的外部类成员一样,为整个类体

    4. 静态内部类--访问-->外部类(比如属性),【访问方式:直接访问所有的静态成员】

    5. 外部类--访问-->静态内部类,【访问方式:创建对象,再访问】

    6. 外部其他类--访问-->静态内部类

      // 方式一
      Outer.Inner inner = new Outer.Inner();
       // 方式二
              // 编写一个方法, 可以返回静态内部类的实例对象
              Outer.Inner inner1 = outer.getInner();	// 实例方法返回
      		Outer.Inner inner11 = Outer.getInner1(); 	// 静态方法返回
      
      static class Inner {
           public Inner getInner() {	// 可以是实例方法
              return new Inner();
          }
          public static Inner getInner1() { // 也可以是静态方法
              return new Inner();
          }
      }
      

标签:部类,Java,复习,--,访问,Inner,Outer,内部
From: https://www.cnblogs.com/ai135/p/17518890.html

相关文章

  • Java基础复习——注解
    注解(Annotation)什么是注解?插入到源码中用于某种工具处理的标签。注解(Annotation)也被称为元数据(Metadata),用于修饰解释包、类、方法、属性、构造器、局部变量等数据信息。在Java中,注解是当作一个修饰符来使用的,它被置于备注解项之前,中间没有分号每一个注解的名称前面......
  • Java基础语法
    Java语法快速入门1.1程序的入口#java程序入口为类中的static的viod的main函数,参数固定为字符串数组publicstaticvoidmain(String[]args){System.out.println("helloworld");}1.2文件名#一个文件中最多只能有一个public类且【文件名】必须和【public类名......
  • nested exception is java.sql.SQLException: connection disabled
    标题:解决SpringBoot连接数据库出现"connectiondisabled"异常在使用SpringBoot连接数据库时,有时候会遇到"nestedexceptionisjava.sql.SQLException:connectiondisabled"异常。这个异常通常是由以下原因引起的:数据库连接配置错误:检查数据库连接的URL、用户名和密码是否正确配......
  • Java 基础复习——StringBuffer 和 StringBuilder
    StringBuffer和StringBuilderStringBuffer类简介java.lang.StringBuffer代表可变的字符序列,可以对字符串内容进行增删很多方法和String相同,但StringBuffer是可变长度的StringBuffer是一个容器注意:StringBuffer的直接父类是AbstractStringBuilder有属......
  • Java的MVC设计模式,带你深刻理解MVC
    什么是MVC?就是ModelViewControl,模型视图控制器。MVC流程图解1.MVC概念:MVC本来是存在于Desktop程序中的,M(Model)是指数据模型,V(View)是指用户界面,C(Control)是控制器。使用MVC的最直接目的就是将M和V实现代码分离,C则是确保M和V的同步,一旦M改变,V应该同步更新。2.MVC工作方......
  • Java中的内部类,代码块
    前言学习Java过程中,对内部类和代码块部分知识比较模糊,容易忘掉。今天再学的时候有一些其他的收获,整理记录一下。1.代码块代码块的作用可以为初始化变量。都在在构造器方法之前执行,分为静态代码块和匿名代码块。静态代码块是在类加载时执行,因此只执行一次。匿名代码块在new实......
  • JAVA石头迷阵游戏
    大家帮我看看这个代码有没有问题,为什么将z设为作弊器但是在IDE中运行出来没有用//测试类importjavax.swing.*;publicclassTest{publicstaticvoidmain(String[]args){newMainFrame();}}importjavax.swing.*;importjava.awt.event.ActionEvent;......
  • java相关
    1、java环境建立2、windows系统下maven环境设置windows系统下下载二进制包apache-maven-3.6.0-bin.zip,然后解压。 第二种方法:使用绝对路径添加maven环境变量,直接在path里面的最前面添加c:\maven\bin;4、windows安装tomcat  设置环境变量也用绝对路径下载https://tomcat.apache.......
  • Java 期中考试及pta4、5总结
    菜单计价1~3(1)前言:期中考试的题目比较简单但是具有典型意义,ptA的题和之前的大差不差,所以会省略一些总体来说这几次作业还是对Java的学习有较大的帮助的,需要认真对待(2)设计与分析:一测验1-圆类设计下面是题目要求:7-1测验1-圆类设计分数 12......
  • centos7安装java
    1.tar-zxvfjdk-8u11-linux-x64.tar.gz 2.编辑环境变量vim/etc/profile 3.source/etc/profile4.java-version ......