内部类:在类中定义的另一个类。
优点:唯一好处就是方便访问外部类中的私有属性。
缺点:类应该由属性和方法组成,而内部类破化了类的基本结构。
public class InnerClassDemo01 {
public static void main(String[] args) {
// TODO Auto-generated method stub
new Outer().fun();
}
}
class Outer{
private String name="外部类Outer";
class Inner{
public void print() {
System.out.println("外部类私有的属性:"+name);
}
}
public void fun() {
new Inner().print();
}
}
//结果:
//外部类私有的属性:外部类Outer
1、使用static定义内部类
public class InnerClassDemo02 {
public static void main(String[] args) {
// TODO Auto-generated method stub
new Outer.Inner().InnnerPrint();
}
}
class Outer{
private static String info="外部类属性";
static class Inner{
public void InnnerPrint() {
System.out.println(info);
}
}
}
static修饰的内部类变为外部类,但static修饰的内部类只能访问static修饰的外部类属性。
2、在方法中定义内部类
public class OuterClassDemo03 {
public static void main(String[] args) {
// TODO Auto-generated method stub
new Outer().print("方法中的参数");
}
}
class Outer{
private String name="外部类的属性";
public void print(final String info) {
class Inner{
public void InnerPrint() {
System.out.println(name);
System.out.println(info);
}
}
new Inner().InnerPrint();
}
}
//结果:
//外部类的属性
//方法中的参数
只有在方法的参数前面加上final修饰,方法内部类才能直接访问内部类外面的方法的参数。
3、在外部访问内部类
public class InnerClassDemo04 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Outer out=new Outer();
//外部访问内部类的格式
//外部类.内部类 内部类对象=外部类实例.new 内部类();
Outer.Inner in=out.new Inner();
in.print();
}
}
class Outer{
private String info="外部类";
class Inner{
public void print() {
System.out.print(info);
}
}
}
//结果:
//外部类
一个内部类除了能被外部类访问,还能被其他类访问