内部类

内部类简单使用


成员内部类(Inner-class)
  • 作为类的成员存在,可以使用访问修饰符来控制访问权限(可使用的修饰符有:abstract, final, public, protected, private, static)
  • 成员内部类中不能存在任何static的变量和方法
  • 成员内部类是依附于外围类的,所以只有先创建了外围类实例才能够创建内部类实例。

如下就是声明和调用成员内部类的具体代码:

public class Test{

    //定义 public 内部类 C 可在外包访问
    public class C{
        public void run(){
            System.out.println("RUNNING...");
        }
    }

    //定义 default 内部类D 可同包访问
    class D{
        public void run(){
            System.out.println("RUNNING...");
        }
    }

    //static 修饰符修饰内部类,此时该内部类不依赖外部类,可直接实例化
    static class E{
        public void run(){
            System.out.println("RUNNING...");
        }
    }

    public static void main(String[] args) {
        C c = new Test().new C();
        D d = new Test().new D();
        E e = new E();
        c.run();
        d.run();
        e.run();
    }
}

编译结果如下:
编译1
运行结果如下:
运行结果1


局部内部类(MethodLocalInnerClass)
  • 类似局部变量,有作用范围的内部类
  • 局部内部类只能使用 final 和 abstract 两个修饰符
  • 在局部内部类中可以调用 Outclass(外部类) 定义的常量

下面是定义在方法中的局部内部类示例:

public class Test {

    final String str1 = "b";

    public void testMethod(){
        //在方法中定义常量 str
        final String str = "a";
        //在 testMethod 中定义局部内部类 A 
        // A 只能在 testMethod 中调用

         class A{
            public void run(){
                //在局部内部类中调用常量 str
                System.out.println("RUNNING...\n"+str+"\n"+str1);
            }
        };
        //实例化并调用 A 的 run() 方法
        A a = new A();
        a.run();
    }

    public static void main(String[] args) {
        new Test().testMethod();
    }
}

编译结果如下:
编译2
我们可以看到运行结果如下:
运行结果2


匿名内部类(AnonymousInnerClass)
  • 没有命名的内部类,一般写在方法或代码块中
  • 没有构造器,只能在定义的地方实例化一次
  • 不能是静态的
  • 一般在实现/重写类和接口方法时才使用
//定义一个 Person 接口
package AnonymousInnerClass;

public interface Person {
   public void sayHi();
}

以下是匿名内部类的声明和使用:

package AnonymousInnerClass;

public class Test {

    public void meetEN(){
        System.out.println("遇见英国朋友了,打招呼");
        //实现Person接口 sayHi()方法 并实例化
        Person p = new Person(){
            @Override
            public void sayHi() {
                System.out.println("HI");
            }
        };
        p.sayHi();
    }


    public void meetCH(){
        System.out.println("遇见中国朋友了,打招呼");
        //实现Person接口 sayHi()方法 并实例化
        Person p = new Person(){
            @Override
            public void sayHi() {
                System.out.println("你好");
            }
        };
        p.sayHi();
    }

    public static void main(String[] args) {
        Test test = new Test();
        test.meetCH();
        test.meetEN();
    }
}

编译结果如下:
编译3
运行结果如下:
运行结果3


静态嵌套(内部)类

内部类用 static 修饰,参考上第一个例子中。

最后,非静态内部类能调用外部类定义的属性和方法。静态内部类只能调用静态属性和方法(这里的内部类指的是成员内部类)。

weixin073智慧旅游平台开发微信小程序+ssm后端毕业源码案例设计 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值