静态内部类
被static修饰的成员内部类称为静态内部类
获取静态内部类语法格式:
外部类名.内部类名 对象名 = new 外部类名.内部类名();
package com.example.ObjectOriented.Interface1.oop10; public class OOPDemo03 { public static void main(String[] args) { Outter03 outter03 = new Outter03(); outter03.show(); Outter03.Inner inner = new Outter03.Inner(); inner.info1(); } } /** * 外部类 */ class Outter03{ public static String name = "张三"; public static void show(){ System.out.println("外部类:"+name); } /** * 定义一个静态内部类 */ static class Inner{ public static String name = "李四"; public int age = 10; public void info1(){ System.out.println(age); } public static void info2(){ System.out.println(name); } } }
静态内部类相比于成员内部类来说简化了访问方式,好处同样是提高了类型的安全性。
静态内部类的特点:
1.本身还是一个class,所以内部成员和普通类没区别
2.静态内部类不能获取外部类中的非静态的属性和方法
3.在外部内中要获取内部类对象直接实例化即可
如果要获取静态内部类中的静态方法或者属性的话可以通过如下方式获取
外部类名称.内部类名称.静态方法(); 外部类名称.内部类名称.静态变量;
匿名内部类
没有名称的内部类我们称为匿名内部类,如果一个内部类在整个操作中只使用一次的话,那么就可以定义为匿名内部类
没有使用匿名内部类的情况:
package com.example.ObjectOriented.Interface1.oop10; public class OOPDemo04 { public static void main(String[] args) { new X().fun2(); } } interface Person{ void sleep(); } class User implements Person{ @Override public void sleep() { System.out.println("睡觉..."); } } class X{ void fun1(Person p){ p.sleep(); } void fun2(){ this.fun1(new User()); } }
其中User类只使用了一次,那么就可以使用匿名内部类
使用匿名内部类的情况:
package com.example.ObjectOriented.Interface1.oop10; public class OOPDemo04 { public static void main(String[] args) { new X().fun2(); } } interface Person{ void sleep(); } class X{ void fun1(Person p){ p.sleep(); } void fun2(){ this.fun1(new Person() { @Override public void sleep() { System.out.println("睡觉。。。"); } }); } }
匿名内部是Java为了方便我们编写程序而设计的一种机制,因为有时候有的内部类之需要创建一个对象就可以了,
这时候匿名内部类就比较合适好,匿名内部类一般都是和接口及抽象类关联的