1 内部类
1.1 内部类编写
-
内部类就是内部的一个类
-
在什么内部呢?
-
类的内部 , 相当于类的一个特殊成员,具备类成员的访问特点 ,称为:成员内部类
4种访问权限
可以使用static关键字修饰
-
方法的内部:类似于方法中的一个变量,称为:局部内部类
只能在当前方法中使用
-
package com.a ;
class A{
public static class B{} //内部类
public void t1(){
class B{} //内部类
}
public void t2(){
new B()
}
}
class B{
private int i ;
public void t1(){}
}
package com.b ;
public class B{}
1.2 内部类特点
特点1: 可用范围不同
特点2: 内部类可以直接使用外层类的成员(包括私有成员)
特点3: 局部内部类可以使用方法中的局部变量,但这个局部变量必须是final修饰的常量
-
jdk1.7之前,要求局部变量必须用final关键字修饰
-
jdk1.7之后,局部变量可以不使用final修饰,但必须不能改变。
class A{
private int i = 10 ;
class C{
public void t1(){
System.out.println(i);
}
}
}
class B{
public void t1(){
A a = new A();
System.out.println(a.i); //错误
}
}
class A{
public void t1(){
final int i = 10 ;
System.out.println(i);
System.out.println(i);
class B{
public void t2(int j){
//i = j ; 报错
System.out.println(i)
}
}
}
}
扩展
成员内部类的属性与外部类的属性同名时的调用
class A{
int i = 10 ;
class B{
int i = 20 ;
public void t1(){
System.out.println(i); //B.i
System.out.println(A.this.i); //A.i
}
}
}
1.3 使用内部类
-
使用内部类定义变量
class A{ class B{} } main(){ A.B b ; }
使用内部类创建对象
-
class A{ int i ; static int j ; class B1{} static class B2{} } main(){ new A().i = 10 ; A.j = 20 ; A a = new A(); A.B1 b1 = new A().new B1(); A.B2 b2 = new A.B2() ; a.i ; a.t1(); b1.i ; b1.t1(); }
注意:
-
内部类的对象一旦创建,基于内部类特点无关了
-
与所有对象的使用都相同。
1.4 匿名内部类
-
只能在定义类的同时就使用 ,使用其创建对象
-
一般会配合接口和抽象类使用,表示定义一个接口或抽象类的子类,并直接使用其创建对象
interface A{
void t1();
}
/*
class B implements A{
int i ;
String name ;
public void t1(){}
}
*/
main(){
// A a = new B();
A a = new A(){
int i ;
String name ;
public void t1(){}
};
//代码至此,就是对a对象的操作
}