内部类的定义:将一个类定义在一个类的里面,对里面那个类称之为内部类,或者内置类,嵌套类
内部类访问的特点:
1:内部类可以直接访问外部类的成员,包括私有成员
2:而外部类要访问内部类中的成员,必须要建立内部类的对象
实例代码:
class Out{
private int num=4;
public void show(){
System.out.println("a="+getInner().a);
}
class Inner{
int a=6;
public void print(){
System.out.println("num="+num);
}
}
public Inner getInner(){
return new Inner();
}
public static void main(String[] args) {
Out out = new Out();
Out.Inner inner = new Out().new Inner();
inner.print();
out.show();
}
}
内部类可以是静态static的,也可用public,default,protected和private修饰
1:public 修饰这个不用说,权限是最大的
2:private 修饰只能在本类中使用,几乎没这么用法
3:如果被static修饰,代表内部类是一个静态的内部类,外部类一加载内部类就存在了(在内存中),那么这个内部类就相当于一个外部类
例子:
public class Demo {
private static int num = 4;
static class Inner{
int a = 6;
public void show() {
System.out.println("num="+num);
}
}
public static void main(String[] args) {
Inner inner = new Demo.Inner();
inner.show();
}
}
内部类是静态的,如果要访问外部类变量,那么外部类的变量也必须是静态的,道理很简单,因为内部类是静态的,就相当于外部类的静态方法,当直接用类.方法名方式调用方法时,这个变量还没有在内存中被分配空间,所以就不能访问,
如果静态内部类中的方法也是静态的,那么内部类都无需创建对象就可以直接调用方法了,代码:
public class Demo {
private static int num = 4;
static class Inner{
int a = 6;
public void show() {
System.out.println("num="+num);
}
public static void fun(){
System.out.println("fun");
}
}
public static void main(String[] args) {
Demo.Inner.fun();
}
}
注意:如果内部类中有静态的成员,那么内部类必须要求是静态的