Java内部类

一 : 内部类

一般情况下,类和类之间是互相独立的,内部类的意思是打破这种独立,让一个类成为另外一个类的内部成员,和成员变量、成员方法同等级别。

Q : 为什么要使用内部类?
A : 采用内部类这种技术,可以隐藏细节和内部结构,封装性更好,让程序的结构更加合理。

二 : 非静态内部类

package Test;

public class OuterClass {
    //成员变量
    private String outerName = "outerName";
    //成员方法
    public void display(){
        System.out.println("OuterClass display");
        System.out.println(outerName);
    }
    //内部类
    public class InnerClass{
        private String innerName;
        public void display(){
            System.out.println("InnerClass display");
            System.out.println(innerName);
        }
        public InnerClass() {
            innerName = "innerName";
        }
    }
    public static void main(String[] args) {
        OuterClass outerClass = new OuterClass();
        outerClass.display();
        OuterClass.InnerClass innerClass = outerClass.new InnerClass();
        innerClass.display();
    }
}

在这里插入图片描述
非静态内部类的使用就是将内部类当作外部类的一个成员变量/成员方法来使用,所以必须依赖于外部类的对象才能调用,用法和成员变量/成员方法是一致的。

基本的内部类还可以在一个方法体中定义。

package Test;

public class OuterClass2 {
    //成员变量
    private String outerName;
    //成员方法
    public void display(){
        class InnerClass{
            public void print(){
                System.out.println("method inner class");
            }
        }
        InnerClass innerClass = new InnerClass();
        innerClass.print();
    }
    public static void main(String[] args) {
        OuterClass2 outerClass2 = new OuterClass2();
        outerClass2.display();
    }
}

在这里插入图片描述

三 : 静态内部类

静态内部类的构造不需要依赖于外部类对象,类中的所有静态组件都不需要依赖于任何对象,可以直接通过类本身进行构造。

package Test;

public class OuterClass3 {
    //成员变量
    private String outerName = "outerName";
    //成员方法
    public void display(){
        System.out.println("OuterClass display");
        System.out.println(outerName);
    }
    public static class InnerClass{
        private String innerName;
        public InnerClass(){
            innerName = "inner class";
        }
        public void display(){
            System.out.println("InnerClass display");
            System.out.println(innerName);
        }
    }
    public static void main(String[] args) {
        OuterClass3 outerClass3 = new OuterClass3();
        outerClass3.display();
        OuterClass3.InnerClass innerClass = new InnerClass();
        innerClass.display();
    }
}

在这里插入图片描述
在这里插入图片描述

四 : 匿名内部类

指的是没有名字的内部类 , 主要应用于接口的实现 .

package Test;

public class Test {
    public static void main(String[] args) {
        //实现类
        MyInterface myInterface = new MyImplent();
        myInterface.test();
        //匿名内部类
        MyInterface myInterface1 = new MyInterface() {
            @Override
            public void test() {
                System.out.println("人中吕布,马中赤兔,方天画戟,专斩义父");
            }
        };
        myInterface1.test();
    }
}

在这里插入图片描述
使用内部类也可以实现接口 :

package Test;

//使用内部类实现接口
public class Test1 {
    public class MyImplement implements MyInterface{
        @Override
        public void test() {
            System.out.println("test");
        }
    }
    public static void main(String[] args) {
        Test1 test1 = new Test1();
        MyInterface myInterface = test1.new MyImplement();
        myInterface.test();
    }
}

在这里插入图片描述


本文到此结束 !

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值