//---测试类
public class Test01 {
public static void main(String[] args) {
/**
* 知识点:静态内部类
* 经验:类似于静态变量
* 编写位置:在类里,方法外
* 需求:调用静态内部类里的方法
* 特点:静态内部类只能调用外部类静态属性
* 总结:创建静态内部类对象,不需要创建外部类的对象
*
* 面试题:静态内部类为什么不能调用外部类的成员属性?
* 因为创建静态内部类对象时不需要创建外部类对象,所以外部类的成员属性不会被创建,就不能调用
*/
//创建静态内部类
Inner inner = new Outter.Inner();
inner.method();
}
}
//外部类
public class Outter {
static String str1 = "外部类属性1";
//静态内部类
static class Inner{
String str1 = "内部类属性1";
public void method(){
System.out.println("静态内部类里的方法 " + str1);
System.out.println("静态内部类里的方法 " + Outter.str1);
}
}
}
3.3接口内部类
//---测试类
public class Test01 {
public static void main(String[] args) {
/**
* 知识点:接口内部类
* 编写位置:在接口里,方法外
* 需求:调用接口内部类里的方法
* 特点:接口内部类只能调用外部接口静态属性
* 总结:接口内部类的使用方法类似于静态内部类
*/
//创建接口内部类
Inner inner = new IOutter.Inner();
inner.method();
}
}
//外部接口--类
public interface IOutter {
String str1 = "接口属性1";
//接口内部类:默认添加static
class Inner{
String str1 = "内部类属性1";
public void method(){
System.out.println("接口内部类里的方法 " + str1);
System.out.println("接口内部类里的方法 " + IOutter.str1);
}
}
}
4.4局部内部类
//---测试类
public class Test01 {
public static void main(String[] args) {
/**
* 知识点:局部内部类
* 编写位置:在方法里
* 需求:调用局部内部类里的方法
* 特点:局部内部类类似于局部变量,不能使用访问修饰符修饰
*/
//创建外部类对象
Outter outter = new Outter();
outter.outterMethod();
}
}
//外部类
public class Outter {
public void outterMethod(){
//局部内部类
class Inner{
public void innerMethod(){
System.out.println("局部内部类的方法");
}
}
//创建局部内部类的对象
Inner inner = new Inner();
inner.innerMethod();
}
}
5.5深入局部内部类
//---测试类
public class Test01 {
public static void main(String[] args) {
/**
* 知识点:局部内部类
* 编写位置:在方法里
* 需求:调用局部内部类里的方法
* 特点:局部内部类类似于局部变量,不能使用访问修饰符修饰
*/
//创建外部类对象
Outter outter = new Outter();
Object obj = outter.outterMethod();
System.out.println(obj);
}
}
//外部类
public class Outter {
public Object outterMethod(){
//外部类的局部变量在局部内部类中使用,JDK1.8版本下该变量会默认使用final修饰
//为什么要加final?
//因为将局部内部类的对象返回给外界后,该变量还能继续使用
int i = 100;
//局部内部类
class Inner{
public String toString(){
return "局部内部类 " + i;
}
}
//创建局部内部类的对象
Inner inner = new Inner();
return inner;
}
}