java学习之路 之 高级类特性2-类的成员之五:内部类

类的成员之五:内部类
在Java中,允许一个类的定义位于另一个类的内部,前者称为内部类,后者称为外部类。
Inner class一般用在定义它的类或语句块之内,在外部引用它时必须给出完整的名称。
Inner class的名字不能与包含它的类名相同;

Inner class可以使用外部类的私有数据,因为它是外部类的成员,同一个类的成员之间可相互访问。而外部类要访问内部类中的成员需要:内部类.成员或者内部类对象.成员。

分类:
成员内部类(static成员内部类嵌套类和成员内部类)
局部内部类(不谈修饰符)、匿名内部类

内部类举例:

public class A{        
        private int s = 111;        
        public class B {    
            private int s = 222;    
            public void mb(int s) {         
                System.out.println(s);    // 局部变量s          
                System.out.println(this.s); // 内部类对象的属性s          
                System.out.println(A.this.s);   // 外层类对象属性s 
            }       
        }       
        public static void main(String args[]){ 
            A a = new A();  
            A.B b = a.new B();  
            b.mb(333);         
        }
    }

内部类特性
Inner class作为类的成员:
可以声明为final的。
和外部类不同,Inner class可声明为private或protected;
Inner class 可以声明为static的,但此时就不能再使用外层类的非static的成员变量;
Inner class作为类:可以声明为abstract类 ,因此可以被其它的内部类继承
【注意】非static的内部类中的成员不能声明为static的,只有在外部类或static的内部类中才可声明static成员。

匿名内部类:
匿名内部类不能定义任何静态成员、方法和类,只能创建匿名内部类的一个实例。一个匿名内部类一定是在new的后面,用其隐含实现一个接口或实现一个类。
new 父类构造器(实参列表)|实现接口(){
//匿名内部类的类体部分
}

interface  A{   
public  abstract void fun1();
}
public class Outer{ 
    public static void main(String[] args) {        
    new Outer().callInner(new A(){//接口是不能new但此处比较特殊是子类对象实现接口,只不过没有为对象取名         
        public void fun1() {                
        System.out.println(“implement for fun1");           
        }       
        }); // 两步写成一步了  
    }   
    public void callInner(A a) {        
        a.fun1();   
    }
}   

class Test {
    public Test() {
        Inner s1 = new Inner();
        s1.a = 10;
        Inner s2 = new Inner();
        s2.a = 20;
        Test.Inner s3 = new Test.Inner();
        System.out.println(s3.a);
    }

    class Inner {
        public int a = 5;
    }

    public static void main(String[] args) {
        Test t = new Test();//5
        Inner r = t.new Inner();
        System.out.println(r.a);//5
    }
}
  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值