Java 最全内部类详解

简介: 一个类的内部又完整的嵌套了另一个类结构。被嵌套的类称为内部类,嵌套它的类称之为外部类。

1、内部类详解

定义:

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

特点:

可以直接访问私有属性,可以提现类与类之间的包含关系

注意:

内部类是重点,也是学习难点,源代码有大量的内部类

语法:

class Outer{ //外部类
  class Inner{ //内部类
  }
}
class Other{ //外部其他类
}

ab1b9c5246ec24e6cac25ffad1cca74.png

public class ClassStructure {  //其它外部类
    public static void main(String[] args) {
        Outer outer = new Outer();
    }
}
class Inner {  //内部类
    private String name;  //属性
    private int age;
    public Inner(String name, int age) {  //构造器
        this.name = name;
        this.age = age;
        System.out.println("姓名: " + this.name + ", 年龄: " + this.age);
    }
}
class Outer { //外部类
    private void run() {  //方法
        System.out.println("方法。。。。");
    }
    {  //代码块
        System.out.println("代码块。。。。");
    }
    Inner inner = new Inner("张三", 18);
}

2、内部类分类

1)定义在外部类局部位置上

局部内部类(有类名)

匿名内部类(没有类名)

2)定义在外部类成员位置上

成员内部类(没用static修饰)

静态内部类(使用static修饰)

3、局部内部类的使用

局部内部类是定义在外部类的局部位置,例:方法带有类名

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

2、不能添加访问修饰符,它是一个局部变量。局部变量不能使用修饰符,可以使用final修饰

3、作用域:方法或代码块中

4、局部内部类访问外部类成员直接访问

5、外部类访问内部类成员,创建新的对象,再访问(作用域内)

6、外部其它类不能访问局部内部类

7、外部类和内部类成员重名,遵循就近原则,或者使用外部类名.this.类名

f42cf28065b4b3d8fa90fa558106e56.png

public class ClassStructure {  //其它外部类
    public static void main(String[] args) {
        Outer outer = new Outer();
        outer.run();
    }
}
class Outer { //外部类
    private String name = "李四";
    private void eat(){
        System.out.println("苹果好吃");
    }
    public void run() {  //方法
        /*
        局部内部类是定义在外部类的局部位置,一般在方法内
        不能添加访问修饰符,可以使用final
        作用域:方法或代码块中
         */
        final class Inner2{ //局部内部类,其实还是一个类
            //可以直接访问外部类的所有成员
            private void running(){
                //外部类和内部类成员重名,遵循就近原则,或者使用外部类名.this.类名
                String name = "王五";
                name = Outer.this.name;
                System.out.println(name);
                eat();
            }
        }
        Inner2 inner2 = new Inner2();
        inner2.running();
    }
}

4、匿名内部类的使用

1、本质是类

2、没有类名

3、内部类

4、是一个对象

注意:

匿名内部类是一个类的定义,它也是一个对象,既有定义类特征,也有创建对象的特征。

语法:

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

e4e8b64fef1d6a8587ab10c042b2756.png

interface Sports{
    void run();
}
public class ClassStructure {  //其它外部类
    public static void main(String[] args) {
        //当做实参直接传递使用
        person(new Sports() {
            @Override
            public void run() {
                System.out.println("喜欢跑步。。。。。。。。");
            }
        });
    }
    //静态方法,形参接口类型
    public static void person(Sports sports){
        sports.run();
    }
}
相关文章
|
23天前
|
Java
【Java基础面试二】、个Java文件里可以有多个类吗(不含内部类)?
这篇文章讨论了Java文件中类的定义规则,指出一个Java文件可以包含多个类(不包含内部类),但其中最多只能有一个public类,且如果有public类,它的名称必须与文件名一致。
|
1月前
|
算法 Java
12 Java常用类(一)(内部类+object类+包装类)
12 Java常用类(一)(内部类+object类+包装类)
28 5
|
29天前
|
Java
【Java】内部类、枚举、泛型
【Java】内部类、枚举、泛型
|
2月前
|
Java
Java进阶之内部类
【7月更文挑战第13天】Java内部类增进代码组织与封装,允许直接访问外部类成员,包括私有成员。主要有四种类型:成员、静态、局部和匿名内部类。匿名内部类常用于一次性实现接口或扩展类。内部类可隐藏实现细节,减少命名冲突,并在特定上下文中定义辅助类。示例展示了静态和非静态内部类如何在Shape类中封装Circle和Rectangle。使用内部类能提升代码可读性,但可能增加复杂性。
31 6
|
3月前
|
Java
一篇文章讲明白Java中内部类详解—匿名内部类
一篇文章讲明白Java中内部类详解—匿名内部类
34 2
|
3月前
|
设计模式 Java 编译器
Java中的内部类(如果想知道Java中有关内部类的知识点,那么只看这一篇就足够了!)
Java中的内部类(如果想知道Java中有关内部类的知识点,那么只看这一篇就足够了!)
|
3月前
|
Java 编译器
24. 【Java教程】内部类
24. 【Java教程】内部类
21 2
|
4月前
|
Java 程序员
Java的内部类与匿名类的技术性文章
Java的内部类与匿名类的技术性文章
32 1
|
3月前
|
Java
Java内部类相关内容总结和解读
Java内部类相关内容总结和解读
24 0
|
3月前
|
存储 Java
Java 五种内部类演示及底层原理详解
Java 五种内部类演示及底层原理详解
24 0