内部类的特性
- 非静态内部类可以非常方便的使用其所在外部类的变量和方法。
- 静态内部类可以非常方便的使用其所在外部类的静态变量和方法,但是不能访问外部类的非静态变量和方法。
- 外部类可以使用到内部类的private方法
public class InnerClassDemo {
public void fun_a(){
InnerB xxx = new InnerB();
//可以使用静态内部类的private方法,这个方法可以是静态和非静态的方法
xxx.a();
xxx.b();
InnerC cccc = new InnerC();
//可以使用普通内部类的private方法(这个方法是非静态方法,非静态内部类不允许有静态的属性和方法)
cccc.a();
}
static class InnerB{
static class SS{
}
private void a(){
}
private static void b(){
}
}
class InnerC{
private void a(){
}
}
}
非静态内部类
注意点:
1.在普通内部类里面是不能声明静态类变量和类常量及方法的。但是静态内部类是可以有的
public class InnerClassDemo {
class Inner1{
//这里会编译报错 inner class connot have static declarations
private static int a = 1;
//这里会编译报错 inner class connot have static declarations
private static String b;
//这里会编译报错 inner class connot have static declarations
public static void fun_a(){
}
}
}
2.实例化的方式
inner class
public class InnerClassDemo {
private static int c = 1;
static class Inner1{
private int a = c;
private String b;
public static void fun_a(){
}
}
class InnerB{
}
}
实例化非静态内部类方式:
public class Main {
public static void main(String[] args){
InnerClassDemo.InnerB inner = new InnerClassDemo().new InnerB();
}
}
静态内部类
注意点:
1.静态内部类可以非常方便的使用其所在外部类的静态变量和方法,但是不能访问外部类的非静态变量和方法。
2.实例化的方式
public class InnerClassDemo {
private static int c = 1;
static class Inner1{
private int a = c;
private String b;
public static void fun_a(){
}
}
class InnerB{
}
}
public class Main {
public static void main(String[] args){
InnerClassDemo.InnerB inner = new InnerClassDemo().new InnerB();
InnerClassDemo.Inner1 staticInner = new InnerClassDemo.Inner1();
}
}