第一章: 内部类
内部类访问规则
(1)内部类可以访问外边类所有成员 包括私有
(2)外部类要访问内部类 必须先建立对象
(3)特色情况:一般的类不可以被私有,内部类可以被私有
内部类访问格式:
(1)当内部类建立在外部类成员位置上时候,可以建立内部类对象:
(2)外部类.内部类 对象名 = new 外部类( ).new 内部类( );
当内部类在成员位置上时候,就可以被成员修饰符修饰
例如:private也可以被static修饰,被修饰后具备静态的特征,当内部类被静态修饰后,只能访问静态成员
内部类定义在局部时候
不可以被成员修饰符修饰
可以直接访问外部类的成员,但不可以访问所在的局部中的变量,只可以访问被final修饰的局部变量
内部类代码举例:
class Outer{
private static int x =3;
static class Iner{
void func(){
System.out.println("Iner"+x);
}
}
void method(){
Iner in = new Iner();
in.func();
}
}
class Inerdemo{
public static void main(){
Outer out=new Outer();
out.method();
}
}
第二章:匿名内部类
其实就是没有名字的内部类
定义匿名内部类前提:
(1)内部类必须是继承一个类或者接口
(2)匿名对象调用格式:new 父类或者接口(){定义子类的内容}
(3)匿名内部类就是一个匿名子类对象,可以理解成呆内容的子类对象
(4)匿名内部类方法最好不要超过3个
一般的匿名类创建过程:
第一步:继承,第二步:复写,第三步:创建对象,第四步:调用
代码实现
abstract class absdemo{
public method(){}; //内部类重写的方法
}
class out{
int x = 3;
class Iner extends absdemo{ //内部类继承
void method(){ //重写
System.out.println(“iner”+x);
}
void func(){
new Iner().method(); //调用
}
}
}
class Inertest{
public static void main(){
new Outer().func();
}
}
简写:用匿名实现
abstract class absdemo{
public method(){};
}
class out{
int x = 3;
void func(){
new absdemo(){ //上面四个步骤一步实现
Method(){
System.out.println(“hello”)
}
}.method();}
}
}
class Inertest{
public static void main(){
new Outer().func();
}
}