java随笔

今天看之前的java基础,发现还有好多不会,感觉补救。

今天看了类中5大成员属性:内部类

先说局部内部类,局部内部类就在外部类的方法和代码块中定义

放一段代码:

public class InnerClass {
    public static void main(String[] args) {
        Outer02 outer02=new Outer02();
        outer02.test();
    }
}
class Outer02{
    public int n1=100;
    public void test(){
        //局部内部类定义在外部类的局部位置,通常在方法
        //可以访问外部类的所有成员,包括私有的
        //不可以添加访问修饰符,但可以使用final修饰
        //作用域在方法体中
        class Inner02{
            int n1=32;
            public void f1(){
                System.out.println(Outer02.this.n1);//100
                System.out.println(n1);//32
            }
        }

        //外部类通过局部内部类的对象调用其方法
        Inner02 inner02=new Inner02();
        inner02.f1();
    }

    {
        class Inner03{
        }
    }
}
View Code

它还有一些细节:比如不能是用修饰符,但可以用final等等

然后是匿名内部类:

//匿名内部类
class Test{
    private int age=10;
    public void metond(){
        //使用匿名内部类,简化开发,可以继承接口或者类
        //在代码底层创建了一个类实现了接口,类名是外部类的名字加上$1
        Teger t0eger=new Teger() {
            @Override
            public void cry() {
                System.out.println("老虎叫");
            }
        };
        t0eger.cry();
        //
        Person asd=new Person(){
            @Override
            public void asd() {
                super.asd();
            }
        };
        asd.asd();
    }
}

interface Teger{
    public void cry();
}

class Person{
    public void asd(){
        System.out.println("父类");
    }
}
View Code

其实有这种写目的是简化代码,想用时就创建一个。比如这样:

public class ClassTest {
    public static void main(String[] args) {
        show(new A(){
            @Override
            public void say() {
                System.out.println("xxxxxx");
            }
        });
    }
    public static void show(A a){
        a.say();
    }
}
class A{
    public void say(){};
}
View Code

 

posted @ 2022-04-29 21:42  chenghaixinag  阅读(10)  评论(0编辑  收藏  举报