标签:pac public bsp 直接 inter out get protected 执行
成员内部类(声明在类内部且方法外的):1是外部类的一个成员:①可以有修饰符(4个)②static final ③可以调用外部类的属性、方法
2具体类的特点:①abstract ②还可以在其内部定义属性、方法、构造器
局部内部类(声明在类的方法里):
内部类作用:
一、静态内部类:作为类的静态成员,存在于某个类的内部
静态内部类虽然是外部类的成员,但是在未创建外部类的对象的情况下,可以直接创建静态内部类的对象。
静态内部类可以引用外部类的静态成员变量和静态方法,但不能引用外部类的普通成员
package com.yyx.pratice; public class TestInner { private String outerName = "outer"; private static int id = 123; private Inner inner = new Inner(); public static class Inner { public void print1() { System.out.println(id); // System.out.println(outerName); } public static void print2() { System.out.println(id); } } public void show() { inner.print1(); } public static void main(String[] args) { TestInner testInner = new TestInner(); testInner.show(); TestInner.Inner.print2(); } }
二、成员内部类:作为类的成员,存在于某个类的内部
成员内部类可以调用外部类的所有成员,但只有在创建了外部类的对象后,才能调用外部的成员
package com.yyx.pratice; public class TestInner { private String outerName = "outer"; // 外部类无法直接访问内部类的成员,需要实例化内部类对象 private Inner inner = new Inner(); public class Inner { private String innerName = "inner"; public void show() { System.out.println(outerName); // 可以直接访问外部类的成员 } } public void show() { System.out.println(inner.innerName); inner.show(); } public static void main(String[] args) { TestInner outer = new TestInner(); outer.show(); // 实例化内部类 TestInner.Inner inner = outer.new Inner(); inner.show(); } }
三、局部内部类:存在于某个方法的内部
局部内部类只能在方法内部中使用,一旦方法执行完毕,局部内部类就会从内存中删除。
必须注意:如果局部内部类中要使用他所在方法中的局部变量,那么就需要将这个局部变量定义为final的
package com.yyx.pratice; public class InnerClass { public static void main(String[] args) { Student stu = new Student(); stu.getPerson().eatRice(); } } interface Person { public void eatRice(); } class Student { public Person getPerson() { /* * 匿名内部类 */ return new Person() { @Override public void eatRice() { System.out.println("我会吃米饭!"); } }; } }
标签:pac public bsp 直接 inter out get protected 执行
原文地址:https://www.cnblogs.com/xianya/p/9165019.html