内部类和匿名内部类的使用

来源:互联网 发布:字体转换器软件下载 编辑:程序博客网 时间:2024/05/22 00:04

内部类

1.内部类可以共享外部类的属性和方法

2.外部类封装了内部类

3.当内部类与外部类属性或方法重名时,在内部类中使用外部类属性或方法时必须加前缀:外部类.this.

4.在方法体外面定义的内部类的访问类型可以是public,protecte,默认的,private等4种类型,这就好像类中定义的成员变量有4种访问类型一样它们决定这个内部类的定义对其他类是否可见;此时,我们也可以在外面创建内部类的实例对象创建内部类的实例对象时,一定要先创建外部类的实例对象,然后用这个外部类的实例对象去创建内部类的实例对象

public class Inner {public static void main(String[] args) {Outer outer = new Outer(5,10);outer.test(); //6,11System.out.println("Inner.times1 = "+outer.inner.times1);//创建内部类对象(此处的inner是一个新的对象,而不是外部类中的成员变量inner)Outer.Inner inner = outer.new Inner();inner.timesInc();System.out.println("Inner.times1 = "+inner.times1);}//main}//外部类class Outer {private int times;private int times1;Inner inner; //内部类通常只在外部类内部使用//构造方法public Outer(int times,int times1){this.times = times;this.times1 = times1;inner = new Inner(); //创建内部类对象inner.timesInc(); //方法调用,实现times加1}//显示私有属性的方法public void test(){System.out.println("Outer.times = "+times);System.out.println("Outer.times1 = "+times1);}//内部类class Inner{int times1 = 1;public void timesInc(){times++; //内部类可以共享外部类的属性和方法times1++; //内部类中的times1加了1Outer.this.times1++; //外部类中的times1加了1}}}

匿名内部类

1.必须有父类

2.匿名内部类是声明子类的同时创建了子类对象

3.语法简洁,使用方法便
new 父类型() {};
调用构造方法 子类类体

4.用于简洁的继承抽象类,或者实现接口

5.匿名内部类共享外部方法中的局部变量时,这个局部变量必须为final修饰

public class NoInner {public static void main(String[] args) {final int a = 10;Yoo yoo = new Yoo(){}; //创建匿名内部类---得到的是子类对象,子类没有名字Yoo yoo1 = new Yoo(); //创建Yoo对象---的到的是父类对象Xoo xoo = new Xoo(){}; //创建匿名内部类---得到的是实现类对象,实现类没有名字Goo goo = new Goo(){public void test(){System.out.println("test, a="+a);}};goo.test();}//main}class Yoo{}interface Xoo{}interface Goo{void test();}


0 0
原创粉丝点击