Java内部类

简介: Java内部类

1 本地内部类

位于方法内部的类就是本地内部类,这种类其实没有很大的作用,用的非常少,所以作为一个了解就可以了

public class TestMO {
    
    public void func(){
        //位于方法内部的类,只能在该方法内使用。
        class Test{
            public int a;
        }
        
    }
    public static void main(String[] args) {
        
    }
}

2 实例内部类

2.1 成员变量

实例内部类其实就是位于外部类的里面,与外部类中的其他成员变量一样,它是属于对象的,但会拥有一些类的特点!

class open{
    public int a = 10;
    public static int b = 20;
    //实例内部类,相当于外部类的一个普通的成员变量
    class inopen{
        public int a = 23;
        //public static b = 22; Error
        public void inTest(){
            System.out.println("inTest()");
        }
    }
    public void test(){
        System.out.println("test()");
    }
}

说明内部类里面是不能定义静态变量的,只能定义静态常量

2.2 创建对象

接下来我们看一样如何创建内部类的对象:

public class TestMO {
    public static void main(String[] args) {
    open open = new open();
    open.inopen in = open.new inopen();
    }
}

由于内部类是实例内部类,所以它需要依靠对象的,所以在创建对象时,需要用到外部类的引用来创建,语法:外部类.内部类 + 变量 = 外部类的引用.new 内部类();

2.3 访问相同的成员变量

当内部类与外部类有相同的变量时:

对于内部类本身可以使用this.a或者直接就是a就可以访问到内部类的a,而对于外部类中的成员变量,我们需要使用:外部类类名.this.a,所以这个就是对于实例内部类就会存在两个this的问题的答案!


3 静态内部类

3.1 成员变量

静态内部类就是比实例内部类多加了static关键字去修饰,这也就意味着静态内部类就不是依赖于对象的了,而是属于类的了!

class Tree{
    public int data1 = 12;
    public static int data2 = 16;
    //利用static关键字修饰的类 静态内部类
    static class inclass{
        public int data3 = 13;
        public static int data4 = 15;
        
        public void intest(){
            System.out.println("test()");
        }
    }
    public void test(){
        System.out.println("test()");
    }
}

静态内部类时可以定义静态的成员变量的

3.2 创建对象

我们在看一看静态内部类是怎样创建对象的

class Tree{
    public int data1 = 12;
    public static int data2 = 16;
    //利用static关键字修饰的类 静态内部类
    static class inclass{
        public int data3 = 13;
        public static int data4 = 15;

        public void intest(){
            System.out.println("test()");
        }
    }
    public void test(){
        System.out.println("test()");
    }
}


public class TestMO {
    public static void main(String[] args) {
        Tree.inclass inclass = new Tree.inclass();
    }
}

由于静态内部类是不属于对象的,而是属于类的,所以我们可以利用类来直接创建

语法: 外部类类名.内部类类名+变量 = new 外部类类名.内部类类名();

3.3 访问成员变量

我们可以发现,静态内部类是不可以访问外部类的非静态成员变量,因为静态的属性是属于类的,而不是对象的,如果要访问,必须要先在内部类中,创建外部类的对象,然后通过对象的引用进行访问!


对于静态内部类与实例内部类,我们之前学过的节点与链表就可以使用内部类来解决,因为链表是由一个个节点组成的,所以内部类适用于一个类是由那几个部门组成的!


4 匿名内部类

匿名内部类的语法:new 类名(){};这种就是匿名内部类,它的访问就是在new 类名(){}.方法/成员变量

class Tree{
    public int data1 = 12;
    public static int data2 = 16;
    
    public void test(){
        System.out.println("test()");
    }
}


public class TestMO {
    public static void main(String[] args) {
        new Tree(){
            @Override
            public void test(){
                System.out.println("重写test()");
            }
        }.test();
    }
}

可以理解为new Tree继承了TestMO,重写了test()方法所以就会打印重写之后的,对于匿名内部类的使用,在前面我们所学的java对象的比较时,用的就是一个匿名内部类,通过重写comparator方法,进行对象的比较!


5 总结

对于内部类语法,我们只需要了解语法规则即可,不必过多的深究,只需要知道如何使用,使用的时候应该注意那些细节!!!

目录
相关文章
|
1月前
|
Java 编译器
【Java】内部类
【Java】内部类
22 0
|
3月前
|
Java
【Java基础面试二】、个Java文件里可以有多个类吗(不含内部类)?
这篇文章讨论了Java文件中类的定义规则,指出一个Java文件可以包含多个类(不包含内部类),但其中最多只能有一个public类,且如果有public类,它的名称必须与文件名一致。
|
3月前
|
算法 Java
12 Java常用类(一)(内部类+object类+包装类)
12 Java常用类(一)(内部类+object类+包装类)
37 5
|
4月前
|
Java
Java进阶之内部类
【7月更文挑战第13天】Java内部类增进代码组织与封装,允许直接访问外部类成员,包括私有成员。主要有四种类型:成员、静态、局部和匿名内部类。匿名内部类常用于一次性实现接口或扩展类。内部类可隐藏实现细节,减少命名冲突,并在特定上下文中定义辅助类。示例展示了静态和非静态内部类如何在Shape类中封装Circle和Rectangle。使用内部类能提升代码可读性,但可能增加复杂性。
37 6
|
3月前
|
Java
【Java】内部类、枚举、泛型
【Java】内部类、枚举、泛型
|
5月前
|
Java
一篇文章讲明白Java中内部类详解—匿名内部类
一篇文章讲明白Java中内部类详解—匿名内部类
91 2
|
5月前
|
设计模式 Java 编译器
Java中的内部类(如果想知道Java中有关内部类的知识点,那么只看这一篇就足够了!)
Java中的内部类(如果想知道Java中有关内部类的知识点,那么只看这一篇就足够了!)
|
5月前
|
Java 编译器
24. 【Java教程】内部类
24. 【Java教程】内部类
29 2
|
6月前
|
Java 程序员
Java的内部类与匿名类的技术性文章
Java的内部类与匿名类的技术性文章
44 1
|
6月前
|
Java
Java内部类(成员内部类、静态内部类、局部内部类、局部内部类)
Java内部类(成员内部类、静态内部类、局部内部类、局部内部类)
47 3