面向对象-内部类
1. 局部内部类
1.1 格式
1.1.1 定义格式
把类定义在方法中即可
public class Outer{
public void test(){
class Inner{//定义了一个局部内部类
public void print(){
System.out.println("局部内部类");
}
}
}
}
1.1.2 对象创建格式
直接在定义局部内部类的方法中安装之前创建对象的格式进行创建即可。如果在该方法外就不能使用该局部内部类了。
public class Outer{
public void test(){
class Inner{//定义了一个局部内部类
public void print(){
System.out.println("局部内部类");
}
}
Inner inner = new Inner();
inner.print();
}
}
1.2 应用场景
如果需要定义一个在方法中临时使用的类时可以使用局部内部类。不过该内部类基本不会使用到。
1.3 注意事项
内部类可以使用外部的局部变量。但是要求这些局部变量必须是事实常量。
2. 成员内部类
2.1 格式
2.1.1 定义格式
把类定义在类中即可
public class Outer{
class Inner{//定义了一个成员内部类
public void print(){
System.out.println("局部内部类");
}
}
}
2.1.2 对象创建格式
在定义内部类的类中创建对象即可。
public class Outer{
private Inner inner = new Inner();
class Inner{//定义了一个成员内部类
public void print(){
System.out.println("成员内部类");
}
}
}
2.2 特点
①在成员内部类中可以直接使用外部类的成员,即使这个成员是私有的。
②如果外部类的成员和内部类的成员重名了,可以使用外部类名.this.成员名来表示外部类的成员。
③成员内部类中不能定义静态的成员。(非静态中不用使用静态)
public class Outer{
private Inner inner = new Inner();
private int num = 10;
private void test(){
System.out.println("外部类中的test方法被调用");
}
class Inner{//定义了一个成员内部类
public void print(){
System.out.println("成员内部类");
System.out.println(num);//等价于Outer.this.num
test();//等价于Outer.this.test();
}
}
}
2.3 应用场景
一个类不会单独使用,需要和另外类(外部类)一起使用才有意义。并且会用到外部类中的私有成员的时候可以把该类定义为一个内部类。例如ArrayList中的Itr
3. 静态内部类
3.1 格式
3.1.1 定义格式
把类定义在类中方法外,然后使用static关键字修饰即可。
public class Outer{
static class Inner{//定义了一个静态内部类
public static void print(){
System.out.println("静态内部类");
}
}
}
3.2 特点
在静态内部类中可以直接使用外部类静态成员,即使是私有的。
3.2 应用场景
一个类不会单独使用,需要和另外类(外部类)一起使用才有意义。需要在内部类中定义静态成员的时候,可以把成员内部类用static修饰变成静态内部类。例如Integer中的IntegerCache
4. 匿名内部类
匿名内部类本质是一个对象。它是某个类(接口)的子类(实现类)对象。
4.1 格式
new 接口名/类名(){
//重写要重写的方法
};
interface Runner{
void run();
}
public class Demo{
public static void main(String[] args){
Runner r = new Runner(){
public void run(){
System.out.println("匿名内部类重写了run方法");
}
};
r.run();
}
}
4.2 应用场景
如果需要创建一个类或者接口的子类对象。但是这个子类只会使用一次,没必要创建单独创建一个类。就可以使用匿名内部类的形式。
标签:Java,内部,void,public,Inner,class,定义 From: https://www.cnblogs.com/NorthFot/p/16648680.html