关于内部类的一些Demo要点

内部类的种类

package com.dasenlin.innerclas;
/**
 * 内部类的一些示例
 * @author Administrator
 *
 */
public class DasenlinInnerClass {
    //静态内部类 //类似于静态变量
    private static class StaticNestedClass{

    }
    //普通内部类(成员内部类)
    private  class FieldInnerClass{

    }
    Runnable able =new Runnable(){//两个作用:定义了匿名内部类的类体;创建了匿名内部类的实例;
        @Override
        public void run() {
        }           
    };//一般不会放在这里;

    public void sayHello(){
        //方法内部类//局内内部类
        class LocalClass{

        }
        //匿名内部类
        Runnable able =new Runnable(){//两个作用:定义了匿名内部类的类体;创建了匿名内部类的实例;
            @Override
            public void run() {
            }           
        };
    }

}

这里写图片描述
静态内部类

package com.dasenlin.innerclas;

import com.dasenlin.innerclas.Outer02.StatInnerClass;

/**
 * 测试静态内部类的一些方法
 * @author Administrator
 *
 */
public class StaticInnerClass {

    public static void main(String[] args) {
    //  Outer02.StatInnerClass sic =new Outer02.StatInnerClass();
        StatInnerClass sicl =new StatInnerClass();//也可以直接调用;
    }
}
class Outer02{
    int c = 5;
    static int d = 10;
    //静态内部类
    /*private*/ static class StatInnerClass{
        int a =3;
        static int b=5;

        public void test(){
            System.out.println(a);
            System.out.println(b);
            System.out.println(d);
            //System.out.println(c);//静态内部类不能调用外部类的非静态成员;
        }
    }
}

方法内部类

package com.dasenlin.innerclas;
/**
 * 方法内部类
 * @author Administrator
 *
 */
public class MethodInnerClass {

    public void test(){
        int a=3;
        class Inner{
            int b=10;
            //static int c=20;//方法内部类只能定义非静态成员
            void tt(){
                System.out.println(b);
                //System.out.println(a);//方法内部类中不能引用所在方法的普通局部变量,除非是常量。
                //方发的生命周期和方法内部类对象的生命周期不一致!
            }
        }
    }
}

内部类与外部类的调用关系

package com.dasenlin.innerclas;
/**
 * 内部类与外部类关系的调用
 * @author Administrator
 *
 */
public class OuterClas03 {

    public static void main(String[] args) {
        Outer03 out =new Outer03();
        Outer03.InnerClass ic=out.new InnerClass();
        ic.test();
    }
}
class Outer03{
    private int a =3;
    int b=10;
    public  void ttt(){
        InnerClass ic = new InnerClass();
    }
    //在一个非静态类成员内部类不能有静态成员,但是申明一个常量就可以。
    class InnerClass{

        void test(){
            System.out.println(a);
            System.out.println("内部类对象"+this);//成员内部类对象的创建。必须先有外部类对象
            System.out.println("外部类的对象"+Outer03.this);
        }
    }
}

匿名内部类的调用方式

package com.dasenlin.innerclas;
/**
 * 匿名内部类的一些方法
 * @author Administrator
 *
 */
public class Demo05 {
    public static void main(String[] args) {
        Outer05 out =new Outer05();
        out.test();
    }
}
class Outer05{
    //参数式调用
    public void test02(Car c){
        c.run();
    }
    public void test(){
        //匿名内部类,由于本内部类定义在方法中,也是方法内部类
        Runnable runnable = new Runnable(){
            @Override
            public void run() {

            }
        };
        //匿名内部内继承式
        Car car =new Car(){
            @Override
            public void run() {
                System.out.println("子类的车跑!");
            }
        };
        car.run();
        //参数式内部类
        test02(new Car(){
            @Override
            public void run() {
                System.out.println("参数式匿名内部类!");
            }
        });

    }
}
class Car{
    public void run(){
        System.out.println("汽车跑");
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值