-
分类
(1) 静态内部类
示例
class Outer { static class Inner { protected static void function() { System.out.println("static"); } } }
(2) 非静态内部类
示例
class Outer { class Inner { protected void function() { System.out.println("static"); } } }
1° 非静态内部类可以随意引用外部类的属性和方法(包括private),外部类也可以随意引用内部类的属性和方法(但是要先创建内部类的实例)
2° 非静态内部类不能有静态的字段和方法(使用静态字段和方法时不需要创建类的实例,而由于内部类非静态,所以必须要先有外部类实例,再有内部类实例,两者矛盾)
3° __是否加载非静态内部类,取决于是否用到了它,例如示例一就不会加载,示例二就会加载
示例一
class Outer { { System.out.println("1"); } class Inner { { System.out.println("2"); } } private Inner inner = null; }
示例二
class Outer { { System.out.println("1"); } class Inner { { System.out.println("2"); } } private Inner inner = new Inner(); }
(3) 局部内部类
示例
class Test { public static void main(String[] args) { class Inner { { System.out.println("hello"); } } Inner inner = new Inner(); } }
和局部变量比较类似
(4) 匿名内部类
1° 示例1,扩展一个基类的匿名内部类
(或定义为abstract) class Person { (或定义为abstract) public void eat() { System.out.println("Just eat"); } } class Demo { public static void main(String[] args) { Person p = new Person() { public void eat() { System.out.println("eat something"); } }; p.eat(); } }
2° 示例2: 实现一个接口
interface Person { void eat(); } class Demo { public static void main(String[] args) { Person p = new Person() { public void eat() { System.out.println("eat something"); } }; p.eat(); } }
3° 实现时必须扩展一个基类或实现一个接口
4° 匿名内部类
(a) 没有名字
(b) 不能有构造函数
© 不能定义静态成员、方法、类
(d) 必须接在new后面
(e) 只能创建一个匿名类的实例
5° 匿名内部类的主要应用是__只使用一次的场合__,例如实现某种特定的实现Runable接口的方式或者GUI应用的Listener
chapter04_Java基础知识_7_内部类
最新推荐文章于 2025-08-06 23:16:57 发布