内部类
- 内部类特点
- 内用外,随意访问;外用内,需要内部类对象.
- 内部类分为两种: 成员内部类 局部内部类 匿名内部类
- 成员内部类如果 属性 出现重名问题 : 外部类名称 . this . 外部类变量名 来访问;
- 局部内部类如果希望访问所在方法的局部变量,那么这个 局部变量必须是不变的 或者 final修饰
成员内部类格式:
修饰符 class 外部类名称{ //外部类的修饰符只能是public/默认
修饰符 class 内部类名称{
}
}
//创建对象
public class Test{
public static void main(String){
类名称 对象名=new 类名称();
外部类名称.内部类名称 对象名=new 外部类名称().new内部类名称();
}
}
局部内部类实例: 只有当前所属的方法才能使用它,出了这个方法就无法使用了
public class Jve {//外部类
public void Jvemimi(){//外部类方法
int num=20;
class Cun{//内部类
public void Cunfangfa(){内部类方法
System.out.println(num);
}
}
Cun cun=new Cun();
cun.Cunfangfa();
}
}
public class Test {//测试类
public static void main(String[] args) {
Jve jve=new Jve();
jve.jveMethod();
}
}
匿名内部类格式: 如果接口的实现类(或者父类的子类) 只需要使用唯一的一次,
那么这种可以省略掉该类的定义,而改为使用 匿名内部类
new 接口名称(){
//覆盖重写所有抽象方法
}
1. new 代表创建对象的动作
2. 接口名称就是i匿名内部类需要实现哪个接口
3. {...}里面才是匿名内部类的内容
实例:
public class Jve{
public static void main(String[] args) {
Flight obj = new Flight() {
@Override
public void flight1() {
System.out.println("实现Flight1");
}
@Override
public void flight2() {
System.out.println("实现flight2");
}
};
obj.flight1();
obj.flight2();
}
}
匿名对象: 在调用方法的时候只调用唯一的一次,可以使用 匿名对象
public class Jve{
public static void main(String[] args) {
new Flight() {//匿名内部类+匿名对象的使用
@Override
public void flight1() {
System.out.println("实现Flight1");
}
@Override
public void flight2() {
System.out.println("实现flight2");
}
}.flight1();
new Flight(){
@Override
public void flight1() {
System.out.println("实现Flight1");
}
@Override
public void flight2() {
System.out.println("实现flight2");
}
}.flight2();
}
}

浙公网安备 33010602011771号