【Java学习笔记】内部类(重点)

[Ethernet in CANoe]4--CANoe工程中SOME/IP报文的详细介绍(二) 介绍了SOME/IP报文的SD报文(ServiceDiscovery),本片文章开始继续介绍SOME/IP报文。 阅读详情

内部类(重点,难点,非常非常重要!!!)

警告:此处为水平分水岭,务必理解透彻,即将对面向对象的理解上一个台阶!!!

注意:内部类是学习的难点,同时也是重点,后面看底层源码时,有大量的内部类!!!


1. 内部类的基本介绍

  • (1)一个类的内部又完整的嵌套了另一个类结构

    • 1. 被嵌套的类称为内部类(inner class)

    • 2. 嵌套其他类的类称为外部类(outer class)。

  • (2)内部类最大的特点就是可以直接访问私有属性,并且可以体现类与类之间的包含关系

2. 内部类的分类

  • 定义在外部类的局部位置上

    • (1)局部内部类

    • (2)匿名内部类(重点,难点)

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

    • (1)成员内部类

    • (2)静态内部类

3. 对一些类概念的说明(关系见如下结构)

  • 外部类

    • 内部类

  • 外部其他类

// 外部类
class outer_class{
    // 内部类
    class inner_class{

    }
}

// 外部其他类(与外部类呈并列关系)
class other_outer_class{

}

至此,类的所有内容完善了,形成一个完整的类结构!!!

  • (1)属性

  • (2)方法

  • (3)构造器

  • (4)代码块

  • (5)内部类


一、局部内部类

1. 对于局部的理解

  • (1)既然是局部,说明特点就是在某一个结构中,并且是可以被调用的,调用后将会失效

  • (2)回顾类的五大结构,引出

    • 局部内部类定义于:类方法、代码块中

2. 对于局部内部类本质的理解

  • (1)本质是一个类

  • (2)由于是局部,可以看作是一个局部变量(成员),只是这个变量(成员)是一个类,其特性大同小异

局部内部类的使用细节

  • (1)说明:局部内部类是定义在外部类的局部位置,并且有类名

  • (2)可以直接访问外部类的所有成员,包含私有的

  • (3)不能添加访问修饰符,因为它的地位就是一个局部变量;局部变量是不能使用修饰符的,但是可以使用 final 修饰,因为局部变量也可以使用 final

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

  • (5)成员的访问

    • 1. 局部内部类访问外部类的成员

      • 访问方式:直接访问

    • 2. 外部类访问局部内部类的成员

      • 访问方式:创建对象,再访问(注意:必须在作用域内)

  • (6)外部其他类不能访问局内部类(因为局部内部类地位是一个局部变量)

  • (7)如果外部类和局部内部类的成员重名时

    • 1. 默认遵循就近原则

    • 2. 如果想访问外部类的成员,则可以使用(外部类名.this.成员)去访问

    • 举例:System.out.println("外部类的 n1=" + 外部类名.this.n1)

    • 理解几个东西

      • 1. 外部类.this:本质是外部类的对象,哪个对象调用了局部内部类所在的方法或代码块,外部类.this就是哪个对象

      • 2. this.n1:this 指向的是调用的当前对象,显然就是局部内部类这个对象的属性

代码解析

package inner;

public class main {
    public static void main(String[] args) {
        System.out.println("你创建了外部类的一个对象,接下来是构造器的初始化\n");
        outer_class outer_class = new outer_class();
        System.out.println("接下来调用外部类的 test() 方法\n");
        outer_class.test();
    }
}

// 外部类
class outer_class{

    {
        class inner_class_code_block{
            public void hi(){
                System.out.println("调用了 外部类 代码块中的 局部内部类 的 hi() 方法");
            }
        }
        inner_class_code_block inner_class_code_blockblock = new inner_class_code_block();
        inner_class_code_blockblock.hi();
    }

    int n1 = 10;
    private final int n2 = 20;

    // 构造器
    public outer_class(){
        // super()  调用父类的无参构造器,这里的父类是 Object()
        // 调用普通代码块
        // 类的属性初始化
        System.out.println("调用了 外部类 的 无参构造器\n");
    }

    public void test(){

        System.out.println("进入了外部类的 test() 方法\n");

        // 局部内部类
        class inner_class{
            final int n1 = 30;
            public void test(){
                System.out.println("进入了局部内部类的 test() 方法");
                System.out.println("1. 访问外部类的成员 n1= " + outer_class.this.n1 + "\n(访问方法:类名.this.n1;注意:当方法名重名的时候,遵循就近原则)" + "\n" );
                System.out.println("2. 访问外部类的 私有 成员 n2=" + n2 + "\n");
                System.out.println("3. 访问局部内部类的成员 n1=" + n1 + "\n");
            }
        }

        // 外部类想要访问内部类的成员或者方法:创建对象,然后访问
        inner_class inner_class = new inner_class();

        System.out.println("通过创建对象的方法\n\n一、外部类 调用 局部内部类的 成员 n1=" + inner_class.n1 + "\n");
        System.out.println("二、外部类 调用 局部内部类的 test()方法\n");
        inner_class.test();
    }
}

// 输出结果
你创建了外部类的一个对象,接下来是构造器的初始化

调用了 外部类 代码块中的 局部内部类 的 hi() 方法
调用了 外部类 的 无参构造器

接下来调用外部类的 test() 方法
进入了外部类的 test() 方法

通过创建对象的方法

一、外部类 调用 局部内部类的 成员 n1=30

二、外部类 调用 局部内部类的 test()方法

进入了局部内部类的 test() 方法
1. 访问外部类的成员 n1= 10
(访问方法:类名.this.n1;注意:当方法名重名的时候,遵循就近原则)

2. 访问外部类的 私有 成员 n2=20

3. 访问局部内部类的成员 n1=30

二、匿名内部类(重点)

为什么需要匿名内部类?

需求:创建一个类实现接口方法,然后再外部类中调用实现接口的方法

package anonymous;

public class main {
    public static void main(String[] args) {
        outer_class outer_class = new outer_class();
        outer_class.test();
    }
}

interface ia{
    public void run();
}

// 单独创建tiger类,在outer_class中调用实现接口的方法
class tiger implements ia{
    public void run(){
        System.out.println("利用接口,实现了run()方法");
    }
}

class outer_class{
    public void test(){
        tiger tiger = new tiger();
        System.out.println("在outer_class中调用tiger中的test()方法\n");
        tiger.run();
    }
}

如果要求该类只使用一次,代码存在的问题

  • (1)单独创建类会使得代码冗余,代码不够简洁

  • (2)不利于维护,如果需要修改某个成员,那该类的所有对象都会受到影响,不够灵活

引出—>匿名内部类

1. 基本介绍

  • (1)本质是类

  • (2)是内部类

  • (3)该类没有名字

  • (4)同时还是一个对象

2. 基本语法

new 类 或 接口(参数列表){
           类体
};

3. 匿名内部类的特点

匿名内部类即是一个类的定义,同时它本身也是一个对象,因此从语法上看,他既有定义类的特征,也有创建对象的特征,因此可以调用匿名内部类方法

4. 使用细节

>>提示:匿名内部类和局部内部类都是定义在局部位置上,具有的特性大同小异

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

  • (2)不能添加访问修饰符,因为它的地位就是一个局部变量

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

  • (4)关于访问

    • 1. 匿名内部类访问外部类成员

      • 访问方式:直接访问

    • 2. 外部其他类不能访问匿名内部类(因为匿名内部类地位是一个局部变量)

  • (5)如果外部类和匿名内部类的成员重名时,匿名内部类访问的话,默认遵循就近原则,

  • (6)如果想访问外部类的成员,则可以使用(外部类名.this.成员)去访问

    • 举例:System.out.println("外部类的 n1=" + 外部类名.this.n1)

package anonymous;

public class main {
    public static void main(String[] args) {
        outer_class outer_class = new outer_class();
        outer_class.test();
    }
}

interface ia{
    public void run();
}

// 单独创建tiger类,在outer_class中调用实现接口的方法
class tiger implements ia{
    public void run(){
        System.out.println("利用接口,实现了run()方法");
    }
}

class outer_class{
    public void test(){
        tiger tiger = new tiger();
        System.out.println("在outer_class中调用tiger中的test()方法\n");
        tiger.run();
    }
}


匿名内部类的使用场景

  • (1)基于接口的匿名内部类

  • (2)基于类的匿名内部类

  • (3)基于抽象类的匿名内部类

  • (4)类只使用一次,后续不再使用

  • (5)匿名内部类的应用:类可以作为实参传递

一、代码解析:基于接口的使用方法

package anonymous;

public class main {
    public static void main(String[] args) {
        outer_class outer_class = new outer_class();
        outer_class.test();
    }
}

interface ia{
    public void run();
}


class outer_class{
    public void test(){

        ia tiger = new ia() {
            @Override
            public void run() {
                System.out.println("在匿名内部类中,实现了接口方法run()");
            }
        };

        tiger.run();
        System.out.println("tiger的运行的运行类型是:" + tiger.getClass());
    }
}

// 运行结果
在匿名内部类中,实现了接口方法run()
tiger的运行的运行类型是:class anonymous.outer_class$1

说明

  • (1)匿名内部类没有类名,其实是在底层分配了一个类名(名称为:外部类的类名 + $1(按照使用的个数依次编号))

  • (2)基于接口的匿名内部类的底层源码分析

class outer_class$1 implements ia{
    @Override
    public void run() {
        System.out.println("在匿名内部类中,实现了接口方法run()");
    }
}
  • (3)当执行new ia()的时候就表示创建了outer_class$1对象实例,把地址返回,通过 tiger 来接收,即相当于创建了 ia 类的 tiger 实例,在匿名内部类中重写了 run()方法(实现了接口方法)

  • (4)对比之前的方法

    • 先创建 tiger 类

    • 实现接口

    • 在 tiger 类中实现接口方法

    • 在外部类中创建 tiger 对象实例,调用 tiger 中的方法

  • (5)tiger 的运行类型就是匿名内部类

  • (6)匿名内部类(outer_class$1)使用一次后就不能再使用,但是接收的对象实例 tiger 是可以不断使用的


二、代码解析:基于类的使用方法

package anonymous;

public class main {
    public static void main(String[] args) {
        outer_class outer_class = new outer_class();
        outer_class.test();
    }
}

class father{

    String name;

    public father(){

    }

    public father(String name){
        this.name = name;
    }

    public void hi(){

    }

}
class outer_class{

    public void test(){
        father father = new father() {
            @Override
            public void hi(){
                System.out.println("匿名内部类重写了father类的hi()方法");
            }
        };

        father.hi();
        System.out.println("father的运行类型是:" + father.getClass());
    }
}
// 运行结果
匿名内部类重写了father类的hi()方法
father的运行类型是:class anonymous.outer_class$1

基于类匿名内部类的底层源码分析

class outer_class$1 extends father{
    @Override
    public void hi(){
        System.out.println("匿名内部类重写了father类的hi()方法");
    }
}


三、基于抽象类的使用方法

package anonymous;

public class main {
    public static void main(String[] args) {
        outer_class outer_class = new outer_class();
        outer_class.test();
    }
}

abstract class A {
    public abstract void hi();
}

class outer_class {

    public void test() {
        A a = new A() {
            @Override
            public void hi(){
                System.out.println("匿名内部类中重写了抽象类中的hi()方法");
            }
        };

        a.hi();
        System.out.println("匿名内部类的运行类型是:" + a.getClass());
    }
}

// 运行结果
匿名内部类中重写了抽象类中的hi()方法
匿名内部类的运行类型是:class anonymous.outer_class$1

基于抽象类的匿名内部类底层源码分析

class outer_class$1 extends A{
  @Overide
  public void hi(){
     System.out.println("匿名内部类中重写了抽象类中的hi()方法");
  }
}

四、匿名内部类的使用实例:作为参数传递

要求:写一个类实现接口,在类中重写接口方法,在主类中调用接口方法

第一种:传统写法

package anonymous;

public class main {
    public static void main(String[] args) {
        animal animal = new animal();
        tool.interface_implement(animal);
    }
}

interface A{
    void hi();  // 默认是 public ,可以不写
}

class animal implements A{
    @Override
    public void hi() {
        System.out.println("animal类实现了接口,并重写了接口中的hi()方法");
    }
}

class tool{
    public static void interface_implement(A interface_member){
        interface_member.hi();
    }
}

// 运行结果
animal类实现了接口,并重写了接口中的hi()方法

问题分析:需要单独创建animal类实现接口,并重写接口中的方法,过于繁琐,代码冗余

第二种:匿名内部类

package anonymous;

public class main {
    public static void main(String[] args) {
        tool.interface_implement(new A() {
            @Override
            public void hi() {
                System.out.println("animal类实现了接口,并重写了接口中的hi()方法");
            }
        });
    }
}

interface A{
    void hi();  // 默认是 public ,可以不写
}

class tool{
    public static void interface_implement(A interface_member){
        interface_member.hi();
    }
}

// 运行结果
animal类实现了接口,并重写了接口中的hi()方法

代码分析

  • (1)将匿名内部类作为实参传递,代码简洁

  • (2)灵活性好:对比传统写法,若需要修改某些内容不会影响到实现了接口A的不同的类的所有对象实例


总结:匿名内部类的本质可以理解为new 接口或类,在底层就会分配一个类(这个类就是匿名内部类)去实现接口或继承一个类,返回这个类的对象实例地址,然后可以用一个对象实例接收,实现方法和成员的调用


三、成员内部类

1. 介绍:定义在外部类的成员位置,并且没有 static 修饰

2. 使用细节

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

  • (2)可以添加任意访问修饰符(public、protected、默认、private),因为它的地位就是一个成员

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

  • (4)关于访问

    • 1. 成员内部类访问外部类成员

      • 访问方式:直接访问

    • 2. 外部类访问成员内部类

      • 访问方式:创建对象,再访问

  • (5)如果外部类和内部类的成员重名时

    • 1.内部类访问的话,默认遵循就近原则

    • 2. 如果想访问外部类的成员,则可以使用(外部类名.this.成员)去访问

3. 外部其他类访问成员内部类

  • 理解:首先成员内部类的本质是成员,即可以用通过对象去访问,然而访问的是一个类,需要创建对象实例

方法一:访问成员时创建对象实例

package anonymous;

public class main {
    public static void main(String[] args) {
        other_class other_class = new other_class();
        other_class.hi();
    }
}

class outer_class{

    class inner_class{
        public void hi(){
            System.out.println("调用了outer_class中inner_class的hi()方法");
        }
    }
}

class other_class{
    // 在外部其他类中访问成员内部类

    public void hi(){
        System.out.println("调用了other_class的hi()方法");
        outer_class outer_class = new outer_class();
        // 访问成员的时候创建成员内部类对象实例
        outer_class.inner_class inner_class = outer_class.new inner_class();
        inner_class.hi();
    }
}

// 输出结果
调用了other_class的hi()方法
调用了outer_class中inner_class的hi()方法

方法二:写一个方法返回对象实例

package anonymous;

public class main {
    public static void main(String[] args) {
        other_class other_class = new other_class();
        other_class.hi();
    }
}

class outer_class{

    class inner_class{
        public void hi(){
            System.out.println("调用了outer_class中inner_class的hi()方法");
        }
    }

    public inner_class get_inner_class_instance(){
        return new inner_class();
    }
}

class other_class{
    // 在外部其他类中访问成员内部类

    public void hi(){
        System.out.println("调用了other_class的hi()方法");
        outer_class outer_class = new outer_class();
        // 访问成员的时候创建成员内部类对象实例
        outer_class.inner_class inner_class_instance = outer_class.get_inner_class_instance();
        inner_class_instance.hi();
    }
}

// 输出结果
调用了other_class的hi()方法
调用了outer_class中inner_class的hi()方法

四、静态内部类

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

2. 静态内部类的使用细节

提示:静态和普通的区别在于(1)静态只能访问静态的(2)普通的能访问静态和非静态的

  • (1)可以直接访问外部类的所有静态成员,包含私有的,但不能直接访问非静态成员

  • (2)可以添加任意访问修饰符(public、protected、默认、private),因为它的地位就是一个成员

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

  • (4)关于访问

    • 1. 静态内部类访问外部类

      • 访问方式:直接访问所有静态成员

    • 2. 外部类访问静态内部类

      • 访问方式:创建对象,再访问

  • (5)如果外部类和静态内部类的成员重名时

    • 1. 静态内部类访问时,默认遵循就近原则

    • 2.如果想访问外部类的成员,则可以使用(外部类名.成员)去访问

3. 外部其他类访问静态内部类

  • 理解

    • (1)内部类是静态的,可以通过类名去访问,无需先创建外部类对象

    • (2)可以直接通过类名访问到静态内部类然后创建对象实例

方法一:类名访问静态内部类,创建对象实例

package anonymous;

public class main {
    public static void main(String[] args) {
        other_class other_class = new other_class();
        other_class.hi();
    }
}

class outer_class{

    static class inner_class{
        public void hi(){
            System.out.println("调用了outer_class中inner_class的hi()方法");
        }
    }
}

class other_class{
    // 在外部其他类中访问成员内部类

    public void hi(){
        System.out.println("调用了other_class的hi()方法");
        // 注意:这里是静态内部类,直接通过类名访问
        outer_class.inner_class inner_class = new outer_class.inner_class();
        inner_class.hi();
    }
}

// 输出结果
调用了other_class的hi()方法
调用了outer_class中inner_class的hi()方法

代码解析:由于是静态的,直接用通过类名访问到静态内部类,之后创建静态内部类对象实例,调用相关的方法即可

方法二:编写一个方法,可以返回静态内部类的对象实例

package anonymous;

public class main {
    public static void main(String[] args) {
        other_class other_class = new other_class();
        other_class.hi();
    }
}

class outer_class {

    static class inner_class {
        public void hi() {
            System.out.println("调用了outer_class中inner_class的hi()方法");
        }
    }

    public static outer_class.inner_class get_inner_class_instance() {
        return new outer_class.inner_class();
    }
}

class other_class {
    // 在外部其他类中访问成员内部类

    public void hi() {
        System.out.println("调用了other_class的hi()方法");
        // 注意:这里是静态内部类,直接通过类名访问
        outer_class.inner_class inner_class_instance = outer_class.get_inner_class_instance();
        inner_class_instance.hi();
    }
}

// 输出结果
调用了other_class的hi()方法
调用了outer_class中inner_class的hi()方法

代码解析:编写一个方法返回静态内部类实例对象,由于是静态的,直接通过外部类的类名访问静态内部类,用一个变量接收返回的静态内部类实例,通过对象调用相关的方法

C#WPF常用的9种布局方式详解 本文介绍WPF中常用的九种布局,Grid、StackPanel、WrapPanel、DockPanel、UniformGrid、Canvas、ScrollViewer、ViewBox、Border。 阅读详情

相关推荐

SAP移动类型

SAP移动类型移动类型定义 移动类型定义

qq_20593197的博客 6201

【Java学习笔记】42 - 内部类(难点,重点)

一个类的内部又完整的嵌套了另一个类结构。被嵌套的类称为内部类(inner class),嵌套其他类的类称为外部类(outer class)。是我们类的第五大成员,内部类最大的特点就是可以直接访问私有属性,并且可以体现类与类之间的包含关系类的五大成员是哪些?属性 方法 构造器 代码块 内部类基本语法public class InnerClass01 {//外部其他类class Outer{//外部类System.out.println("代码块");

qq_41891655的博客 376

Arduino四足开源机器猫-Opencat(导航贴)

本内容由我和小伙伴共同编写,未经授权,谢绝转载! 1.项目介绍 2.组装调试教程 (一)Opencat-F (1)资料地址(包含程序代码&&3D打印图纸): 链接:https://pan.baidu.com/s/1AcVA5jSiOSzRKqEQAomrTA 提取码:szfx (2) (二)Opencat-B (1)组装调试 (2)组装调试注意事项 (3)添加新技能 3.编程 ...

qqliuzhitong的博客 4171

拉勾教育 Java就业急训营 学习笔记——内部类

拉勾教育 Java就业急训营 学习笔记——内部类

Portia356的博客 331

王道考研操作系统笔记(第一章)附:王道考研408所有PPT和思维导图

学习感想 别人的笔记对你的学习基本上没有用处,容易培养人的惰性,如需ppt和思维导图请拉到最后,有github链接 记笔记并不是一件浪费时间的事情,还有利于多次学习 真心希望大家在学习的过程中记笔记 操作系统 第一章 计算机系统概述 1.1 操作系统 1.1.1 操作系统的概念和功能 概念 操作系统(Operating System, OS)是指控制和管理整个计算机系统的硬件和软件资源,并合理地组织调度计算机的工作和资源的分配;以提供给用户和其他软件方便的接口和环境;它是计算机系统中最基本的系统软

qq_41732756的博客 1万+

TensorFlow_PyTorch实战:构建AI人工智能回归模型

回归分析是机器学习的核心任务之一,用于预测连续型目标变量(如房价、股票价格、用户留存时间等)。基础线性回归模型的数学原理与代码实现多项式回归模型的过拟合处理与正则化技巧自定义数据集加载与数据预处理流程动态图(PyTorch)与静态图(TensorFlow)的编程范式对比模型评估指标与可视化分析方法核心概念:对比两大框架的架构设计,解析回归模型核心组件数学原理:推导线性回归的假设函数、损失函数及优化算法算法实现:提供TensorFlow和PyTorch的完整代码示例项目实战。

AI天才研究院 1428

java202302java学习笔记第七天-n种内部类

java

qq_41632427的博客 74

保姆级教程:用CANoe的LIN Slave Conformance Tester搞定一致性测试(附LDF配置避坑点)

本文详细介绍了如何使用CANoe的LIN Slave Conformance Tester进行汽车电子LIN从节点一致性测试,包括测试环境搭建、LDF文件配置、多通道测试技巧及常见问题解决方案。通过实战案例和高级配置技巧,帮助工程师高效完成测试任务,确保LIN总线通信的可靠性。

weixin_30385925的博客 523

java基础进阶学习笔记Day03(黑马磊哥课程)

通配符和上下限E,T,K,V是定义泛型时用;?是使用泛型时用car = lx;//报错car = tsl;//报错//不报错//不报错虽然LX和TSL是Car的子类,但是ArrayList,ArrayList和ArrayList不存在父子类关系和的在使用上有什么区别。

wangwangxiaohai的博客 1380

【100%通过率】华为OD机试真题 Python 实现【字符串重新排列】【2022.11 Q4新题】

给定一个字符串s,s包括以空格分隔的若干个单词,请对s进行如下处理后输出: 1、单词内部调整:对每个单词字母重新按字典序排序 2、单词间顺序调整: 1)统计每个单词出现的次数,并按次数降序排列 2)次数相同,按单词长度升序排列 3)次数和单词长度均相同,按字典升序排列 请输出处理后的字符串,每个单词以一个空格分隔。

MISAYAONE的博客 7981

YOLO26魔改:ICIP2026 SDTA|单深度转置注意力注入C2PSA,长程依赖与局部细节双增强,mAP提升显著

多尺度适配:SDTA的深度卷积与C2PSA的空间注意力结合,增强对多尺度目标的结构感知,改善遮挡与密集场景下的检测鲁棒性。

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 292

java202303java学习笔记第二十四天-匿名内部类4

java

qq_41632427的博客 89

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Java静态内部类——重点是精妙的demo

什么是内部类 大部分时候,类被定义成一个独立的程序单元。在某些情况下,也会把一个类放在另一个类的内部定义,这个定义在其他类内部的类就被称为内部类(有些地方也叫做嵌套类),包含内部类的类也被称为外部类(有些地方也叫做宿主类) 作用?? 更好的封装性 内部类成员可以直接访问外部类的私有数据,因为内部类被当成其外部类成员,但外部类不能访问内部类的实现细节,例如内部类的成员变量

当一堆用不熄灭的柴火 4万+

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Java内部类(匿名内部类)

范例:Outer.Inner in = new Outer().new.Inner()范例: Outer.Inner in = new Outer.Inner();静态内部类中是否可以直接访问外部类的静态成员?静态内部类中是否可以直接访问外部类的实例成员?,外部类的静态成员只有一份,可以被共享访问。,外部类的实例成员必须要用外部类对象访问。new 类|抽象类名|或者接口名(){...

YWX 1万+

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Java内部类(静态内部类、匿名内部类等)详解

总结了常见的四大内部类(成员内部类、静态内部类、局部内部类、匿名内部类)相关知识,通过写代码详细讲解了静态内部类和匿名内部类,成员内部类和局部内部类使用较少就没有写代码举例。

???? 6120

【JAVA学习笔记】匿名内部类与静态内部类

匿名内部类是一种没有名字的内部类,它在定义的同时就被实例化,通常用于简化代码,特别是在需要一次性实现某个类或接口的时候。静态内部类是使用static关键字修饰的内部类,它与外部类的其他成员不同,不依赖于外部类的实例,可以直接通过外部类的类名来访问。// 静态内部类// 非静态内部类// 实例化静态内部类// 输出:This is a static inner class.// 实例化非静态内部类需要先创建外部类实例。

weixin_48272591的博客 1798

什么是内部类(四种)?重点匿名类

重点:匿名内部类

2401_83641824的博客 1309

Java 内部类详解

在 Java 中,我们通常是把不同的类创建在不同的包里面,对于同一个包里的类来说,它们都是同一层次的。但其实还有另一种情况,有些类可以被定义在另一个类的内部,我们把在一个类里面定义的类称为内部类(InnerClass)或嵌套类,把外面定义的类称为外部类(OutClass)或宿主类。也就是说,在类的内部既可以定义成员变量和方法,也可以定义其他的类。public class Outer { // 外部类class Inner { // 内部类// 方法和属性。

流华追梦的专栏 1314

Java 匿名内部类【重点】

Java 匿名内部类【重点】

m0_72786443的博客 3779

Java学习笔记——内部类

什么是内部类 一个类里面又完整地嵌套了另一个类结构。 类的五大成员 成员属性、成员方法、构造器、代码块、内部类 内部类的特点 内部类的最大特点就是可以直接访问私有属性 内部类的分类 定义在外部类局部位置上(比如方法内) 局部内部类(有类名) 通常定义在外部类的局部位置,通常在方法/代码块 不能加修饰符 能加final 加了final之后其他类不能继承它 作用域 仅仅在定义它的方法或者代码块中 内部类如何访问外部类:内部类可以直接访问外部类的所有成员,包含私有的 class OuterClas

weixin_46324286的博客 936

java 静态内部类的使用

Java基础第十二讲:面向对象基础(六)[内部类] http://android.yaohuiji.com/archives/3247 本讲内容:内部类 Java语言允许在类中再定义类,这种在其它类内部定义的类就叫内部类。内部类又分为:常规内部类、局部内部类、匿名内部类和静态嵌套类四种。我们内部类的知识在Android手机开发中经常用到。 一、常规内部类 所谓常规内部类,

jiangxinyu的专栏 6万+

Java基础内部类学习笔记

Java基础内部类学习笔记一.什么是内部类?二.内部类的分类1.局部内部类2.匿名内部类(很重要)3.成员内部类4.静态内部类 一.什么是内部类? 一个类的内部嵌套了另一个类,这个类叫内部类,是类的第五大成员(属性,方法,构造器,代码块,内部类)。 内部类最大的特点就是可以直接访问私有属性,它本质上还是一个类。 基本语法: public class Localinner { //外部其他类 public static void main(String[] args) { } } clas

cc1373709409的博客 711

【JavaSE】内部类的使用【重点】

本文仅仅作为个人的学习笔记,有不对的地方还请多多指点自学java的第 … 天,加油突破自己常常是最后一把钥匙打开了沈殿门,不要失去信心,只要坚持不懈,就终会有结果的一个类的内部又完整的嵌套了另一个类结构,被嵌套的类为内部类(inner class),嵌套其他类的类为外部类(outer class),是类的五大成员 [属性、方法、构造器、接代码块、内部类] ,内部类最大的特点是可以直接访问私有属性,并且可以体现类与类之间的包含关系。局部内部类:有类名匿名内部类:没有类名。

weixin_65584018的博客 745

kotlin静态内部类和java静态内部类的区别

首先我们看下RecyclerView的ViewHolder的写法,java和kotlin分别用静态内部类进行实现,代码是随意找的: java静态内部类: static class EndViewHolder extends BlocksView.ViewHolder { public EndViewHolder(View itemView) { super(itemView); itemView.setMinimumHeight

王温暖的博客 8151

Java内部类(难点、重点)

一个类的内部又完整的嵌套了另一个类结构,被嵌套的类称为内部类,内部类的最大的特点就是可以直接访问私有属性,并且可以体现类与类之间的包含关系。

m0_72244040的博客 471

java new 一个内部类_java内部类

java内部类的几种类型:成员内部类,静态内部类,方法内部类,匿名内部类。成员内部类:成员内部类是类内部的非静态类。成员内部类不能定义静态方法和变量(final修饰的除外)。这是因为成员内部类是非静态的,类初始化的时候先初始化静态成员,如果允许成员内部类定义静态变量,那么成员内部类的静态变量初始化顺序是有歧义的。例子如下:运行结果为:访问外部类中的a:99,访问内部类中的b:2成员内部类的使用方法...

weixin_29798379的博客 5241
上一篇: 【Java学习笔记】接口
下一篇: 【Java学习笔记】枚举
jackson凌
博客等级 码龄2年 476粉丝 183原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jackson凌

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值