标签:静态变量 文件 handle ide snippet idt pre 括号 href
目录
内部类就是在一个类的内部在定义一个类,比如,A类中定义一个B类,那么B类相对A类来说就称为内部类,而A类相对B类来说就是外部类了。
内部类不是在一个java源文件中编写俩个平行的俩个类,而是在一个类的内部再定义另外一个类。 我们可以把外边的类称为外部类,在其内部编写的类称为内部类。
内部类分为四种:
1. 成员内部类
2. 静态内部类
3. 局部内部类
4. 匿名内部类
成员内部类中不能写静态属性和方法
定义一个内部类
实例化内部类,首先需要实例化外部类,通过外部类去调用内部类
成员内部类能访问外部类的所有属性(这里的属性包括私有的成员变量,方法)
如果内部类中的变量名和外部类的成员变量名一样,要通过创建外部类对象 "."属性来访问外部类属性,通过this.属性访问内部类成员属性
借助成员内部类,来总结内部类(包括4种内部类)的通用用法:
1、要想访问内部类中的内容,必须通过外部类对象来实例化内部类。
2、能够访问外部类所有的属性和方法,原理就是在通过外部类对象实例化内部类对象时,外部类对象把自己的引用传进了内部类,使内部类可以用通过Outer.this去调用外部类的属性和方法,
一般都是隐式调用了,但是当内部类中有属性或者方法名和外部类中的属性或方法名相同的时候,就需要通过显式调用Outer.this了。
一个小例子:
如其名,static修饰的内部类就叫静态内部类。
1.内部类能够调用外部类的方法和属性,在静态内部类中就行了,因为静态内部类没有了指向外部类对象的引用。除非外部类中的方法或者属性也是静态的。
2.静态内部类能够直接被外部类给实例化,不需要使用外部类对象
3.静态内部类中可以声明静态方法和静态变量,但是非静态内部类中就不可以声明静态方法和静态变量
局部内部类是在一个方法内部声明的一个类
局部内部类中可以访问外部类的成员变量及方法
局部内部类中如果要访问该内部类所在方法中的局部变量,那么这个局部变量就必须是final修饰的
局部内部类一般的作用跟在成员内部类中总结的差不多,但是有两个要注意的地方:
1. 在局部内部类中,如果要访问局部变量,那么该局部变量要用final修饰
2.局部内部类不能通过外部类对象直接实例化,而是在方法中实例化出自己来,然后通过内部类对象调用自己类中的方法。
匿名内部类是最常用的一种内部类。
1. 匿名内部类需要依托于其他类或者接口来创建
2. 匿名内部类的声明必须是在使用new关键字的时候
匿名内部类的声明及创建对象必须一气呵成,并且之后能反复使用,因为没有名字。
例子:A是一个类(普通类、抽象类都可以),依托于A类创建一个匿名内部类对象
1. 匿名内部类除了依托的类或接口之外,不能指定继承或者实现其他类或接口,同时也不能被其他类所继承,因为没有名字。
2. 匿名内部中,我们不能写出其构造器,因为没有名字。
3. 匿名内部中,除了重写上面的方法外,一般不会再写其他独有的方法,因为从外部不能直接调用到
不用匿名内部类和用匿名内部类实现一个接口中的方法的区别
不用匿名内部类
使用匿名内部类:
分析:
new Test1(){实现接口中方法的代码}; Test1(){...}这个的作用就是将接口给实现了,只不过这里实现该接口的是一个匿名类,也就是说这个类没名字,只能使用这一次,我们知道了这是一个类, 将其new出来,就能获得一个实现了Test1接口的类的实例对象,通过该实例对象,就能调用该类中的方法了,因为其匿名类是在一个类中实现的,所以叫其匿名内部类,
标签:静态变量 文件 handle ide snippet idt pre 括号 href
原文地址:https://www.cnblogs.com/koudada/p/14763075.html