【java】内部类

在一个类的内部定义的类,称为内部类

内部类主要分类: 

实例内部类

局部内部类

静态内部类 

1、实例内部类 

创建实例内部类,外部类的实例必须已经创建;

实例内部类会持有外部类的引用;

实例内部不能定义 static 成员,只能定义实例成员。

public class InnerClassTest01 {    
    private int a;    
    private int b;

    InnerClassTest01(int a, int b) {   
        this.a = a;   
        this.b = b;  
    }    
    //内部类可以使用 private 和 protected 修饰  
    private class Inner1 {   
        int i1 = 0;   
        int i2 = 1;      
        int i3 = a;   
        int i4 = b;      
        //实例内部类不能采用 static 声明   
        //static int i5 = 20;  
    }     
    public static void main(String[] args) {   
        InnerClassTest01.Inner1 inner1 = new InnerClassTest01(100, 200).new Inner1();               
        System.out.println(inner1.i1);   
        System.out.println(inner1.i2);   
        System.out.println(inner1.i3);   
        System.out.println(inner1.i4);    
    }  
} 

2、静态内部类 

静态内部类不会持有外部的类的引用,创建时可以不用创建外部类;

静态内部类可以访问外部的静态变量,如果访问外部类的成员变量必须通过外部类的实例访问。

public class InnerClassTest02 {    
    static int a = 200;    
    int b = 300;    
    static class Inner2 {   
        //在静态内部类中可以定义实例变量 
        int i1 = 10;   
        int i2 = 20;        
        //可以定义静态变量   
        static int i3 = 100;      
        //可以直接使用外部类的静态变量   
        static int i4 = a;      
        //不能直接引用外部类的实例变量   
        //int i5 = b;      
        //采用外部类的引用可以取得成员变量的值   
        int i5 = new InnerClassTest02().b;     
    }      
    public static void main(String[] args) {   
        InnerClassTest02.Inner2 inner = new InnerClassTest02.Inner2();           
             System.out.println(inner.i1);  
    }  
}

 3、局部内部类 

局部内部类是在方法中定义的,它只能在当前方法中使用。

和局部变量的作用一样,局部内部类和实例内部类一致,不能包含静态成员。

public class InnerClassTest03 {    
    private int a = 100;    
    //局部变量,在内部类中使用必须采用 final 修饰  
    public void method1(final int temp) {   
        class Inner3 {        
            int i1 = 10;        
            //可以访问外部类的成员变量    
            int i2 = a;        
            int i3 = temp;  
    }       
    //使用内部类   
    Inner3 inner3 = new Inner3();      
    System.out.println(inner3.i1); 
    System.out.println(inner3.i3); 
  }          
    public static void main(String[] args) {   
        InnerClassTest03 innerClassTest03 = new InnerClassTest03();               
        innerClassTest03.method1(300);  
    }
} 

4、匿名内部类 

是一种特殊的内部类,该类没有名字 

没有使用匿名类 

public class InnerClassTest04 {    
    public static void main(String[] args) {   
        MyInterface myInterface = new MyInterfaceImpl();   
        myInterface.add();  
    }  
} 
 
interface MyInterface { 
 
    public void add();  
} 
 
class MyInterfaceImpl implements MyInterface { 
 
    public void add() {   
        System.out.println("-------add------");   
    }  
}

使用匿名类 

public class InnerClassTest05 { 
    public static void main(String[] args) {   
        /*   MyInterface myInterface = new MyInterface() {    
                    public void add() {     
                    System.out.println("-------add------");      
            }   
    };   
        myInterface.add();   
        */      
    /*   
        MyInterface myInterface = new MyInterfaceImpl();    
        InnerClassTest05 innerClassTest05 = new InnerClassTest05();           
        innerClassTest05.method1(myInterface);   
    */   
        InnerClassTest05 innerClassTest05 = new InnerClassTest05();       
        innerClassTest05.method1(new MyInterface() {    
            public void add() {     
                System.out.println("-------add------");      
          }    
        });     
    }       
    private void method1(MyInterface myInterface) {   
        myInterface.add();  
    } 
} 
 
interface MyInterface { 
 
    public void add();  
} 
 
/* 
class MyInterfaceImpl implements MyInterface { 
 
    public void add() {   
        System.out.println("-------add------");   
        }  
} 
*/ 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值