JavaSE基础自学----内部类/匿名内部类

内部类/匿名内部类:

  • 内部类访问规则: 内部类可以直接访问外部类中的成员,包括私有( 内部内可以直接访问外部类的原因:有默认的前缀
    OutClass.this.x) 外部类想要访问内部类.需要建立内部类的对象
  • 注:当内部类中定义了静态成员,该内部类必须是静态内部类
    当外部类静态方法访问内部类,该内部类也必须是静态的

内部类代码演示-----

//外部类
class OutClass{
    int x=1;
    public void method_1(){
       InClass in= new InClass(); //外部类访问内部类必须建立内部类对象
        in.methodIn();
    }

     //内部类
    class InClass{

        public void methodIn(){

            System.out.println(x);
            System.out.println("内部类方法");
        }
    }

public class DEMO {
    public static void main(String[] args) {
        OutClass out=new OutClass();
        out.method_1();

        OutClass.InClass i=new OutClass().new InClass(); //直接创建内部类对象,一般不用
        i.methodIn();
    }
}

静态内部类代码演示-----

class OutClass{
    static int y=1;

    public void method_1(){
       InClass1 in= new InClass1(); //外部类访问内部类必须建立内部类对象
        in.method2();
        
        InClass1.method1();
        
    }

    //静态内部类 ---一般少用
    static class InClass1{

        public static void method1(){ //静态方法

            System.out.println(y);
        }
        public void method2(){    //非静态方法

            System.out.println(y);
        }
    }
}

public class DEMO {
    public static void main(String[] args) {

        OutClass.InClass1.method1();     //直接访问静态类中静态成员

        new OutClass.InClass1().method2();  //直接访问静态类中非静态成员
    }


匿名内部类:

  • 匿名内部类其实就是内部类的简写格式
  • 定义匿名内部类前提:该内部类必须是继承一个类或者实现接口
  • 匿名内部类格式:new 父类或接口(){定义子类内容}
  • 其实匿名内部类就是一个匿名子类对象

代码演示-----

//接口
interface inter{
     void method();
}

//外部类
class OutClass{
    public void function(){
   
     //匿名内部类写法
        new inter(){    
            public void method(){
                System.out.println("实现接口");
            }
        }.method();
    }


    /* 这是非匿名的写法
     内部类实现接口
    class InClass implements inter{
        public void method(){
            System.out.println("实现接口");
        }
    }
    public void function(){
        new InClass().method();
    }
    */
}


趣味题:

//接口
interface inter{
     void method();
}
class test{
   //补足代码..通过匿名内部类
}

public class DEMO {
    public static void main(String[] args) {
        
        test.function().method(); //function方法返回的必须是inter子类对象.这样就可以直接调用method
    }
}

答案-----

class test{
    public static inter function (){
       return new inter(){
            public void method(){
                System.out.println("run");
            }
        };
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值