-
分类
(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_内部类
最新推荐文章于 2022-08-01 22:43:10 发布
本文深入解析Java中的四种内部类:静态内部类、非静态内部类、局部内部类和匿名内部类。详细阐述了它们的特点、使用场景及限制,如非静态内部类如何引用外部类的属性和方法,局部内部类与局部变量的相似性,以及匿名内部类在只使用一次场合的应用。
901

被折叠的 条评论
为什么被折叠?



