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{ } } }
它还有一些细节:比如不能是用修饰符,但可以用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("父类"); } }
其实有这种写目的是简化代码,想用时就创建一个。比如这样:
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(){}; }