JAVA学习——内部类

JAVA学习——内部类


一、内部类的访问规则。

1、  内部类可以直接访问外部类的成员,包括私有成员,原因是:内部类中持有一个外部类的引用,格式为:外部类名.this

2、  外部类访问内部类必须建立内部类对象。

3、  当内部类定义在直接外部类的成员位置上,而且是非私有成员,可以在间接外部类中引用内部类,其格式为:直接外部类名.内部类名 对象名= new直接外部类构造函数名.new 内部类构造函数名,形如Outer.Inner inner = new Outer().new Inner();

4、  在成员位置上的内部类可以被可以被成员修饰符修饰,比如:private static(当内部类被其修饰,则内部类只能访问直接外部类的静态成员)等内部类相当于外部类的一个成员。内部类有static修饰时则内部类必须是static

5、  当内部类定义在局部时,1)、不可以被成员修饰符修饰。2)、可以直接访问外部类中的成员,因为该内部类还持有外部类的引用。但不可以访问它所在的局部中的变量,只能访问被final修饰的局部变量。

实例演示:

package com.abin;

class Outer{

    //定义外部内的私有成员

    private int x=2;

    //创建内部类

    class Inner{

        //定义内部类的私有成员

        private int x = 4;

        public void show(){

            int x = 6;

            System.out.println("您正在访问内部类的show()方法");

            System.out.println("在内部类Inner的方法show()中调用方法内部成员x="+x);

            System.out.println("在内部类Inner的方法show()中调用内部类私有成员x="+this.x);

            System.out.println("在内部类Inner的方法show()中调用外部类的私有成员x="+Outer.this.x);

        }

    }

    public void show(){

        System.out.println("您正在访问外部类的show()方法");

        //在外部类中访问内部类需要建立内部类的对象

        Inner inner = new Inner();

        inner.show();

    }

   

}

public class InnerClass {

    public static void main(String[] args) {

        //实例化外部类

        Outer outer = new Outer();

        //调用外部类方法

        outer.show();

        //直接实例化内部类

        Outer.Inner inner = new Outer().new Inner();

        System.out.println("通过内部类实例化的对象调用内部类方法show():");

        inner.show();

    }

}

二、匿名内部类

1、匿名内部类其实就是内部类的简写格式。

2、定义内部类的前提:内部类必须是继承一个类或者实现接口。

3、匿名内部类的格式:new 父类或者接口名(){定义子类的内容}

4、其实匿名内部类就是一个匿名子类对象。

示例代码:

package com.abin;

interface inner{

    void method();

}

class OuterA{

   

    static inner show(){

        return new inner() {

            @Override

            public void method() {

                System.out.println("method:嘿,陈从宾我是你定义的匿名内部类中的方法");

            }

        };

    }

}

public class InnerClass2 {

    public static void main(String[] args) {

        OuterA.show().method();

        show(new inner() {

            @Override

            public void method() {

                System.out.print("method:嘿,陈从宾你以接口作为参数成功¡¤¡¤¡¤");

            }

        });

    }

   

    public static void show(inner in) {

        in.method();

    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值