内部类

  • 内部类特点
  1. 内用外,随意访问;外用内,需要内部类对象.
  2. 内部类分为两种: 成员内部类   局部内部类   匿名内部类
  3. 成员内部类如果 属性 出现重名问题  :   外部类名称 this 外部类变量名   来访问;
  4. 局部内部类如果希望访问所在方法的局部变量,那么这个 局部变量必须是不变的 或者 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();
    }
}

  

 

posted @ 2021-05-28 18:29  小盆友在学习  阅读(58)  评论(0)    收藏  举报