黑马程序员---Java匿名内部类使用

时间:2022-10-01 00:48:19

------ android培训、java培训、期待与您交流! ----------

内部类:在一个类中又声明了一个类 

class A {  //外部类

            class B {  //内部类

    }

}

1.常规用法

public class Demo13 {
public static void main(String[] args) {
Father2 f = new Son1();
f.show();
//f.print();//此处不能调用父类中没有声明而子类中特有的方法
}
}

class Father2 {
void show() {
System.out.println("father.show");
}
}

class Son1 extends Father2 {
void show() {
System.out.println("son.show");
}
void print(){
System.out.println("son.print");
}
}

 

2.用匿名类创建对象

 

public class Demo13 {

public static void main(String[] args) {
/*
* 使用内部类创建对象
* 在父类基础上new一个匿名内部类赋值给父类对象
* 类内写方法调用
* */
Father2 f = new Father2() {
void show() {
System.out.println("son.show");
}
void print(){
System.out.println("son.print");
}
};
f.show();

//f.print();//此处不能调用父类中没有声明而子类中特有的方法
}
}

class Father2 {
void show() {
System.out.println("father.show");
}
}


内部类有什么作用?

    内部类一般是在分析阶段.发现某一个实体是另外一个实体的不可分割的一部分.

class 人 {

         class 心脏 {

  }

         class 脑 {

  }

}

内部类的定义位置:

    1.内部类可以声明在类的成员位置上,对于这一种情况,内部类是可以使用成员修饰符的.

    2.内部类可以声明在方法内.

内部访问:  (重点)

    1.内部类声明在成员位置上 (上面的常规用法)

              对于内部类来说它可以直接访问外部类的成员.

              应用的比较多的访问方式:

                         在外部类定义方法,去访问内部类的成员

              在外部去直接访问内部类的成员

                         ①非static修饰的内部类

                                                   外部类名.内部类名  引用 = new 外部类名().new 内部类名();

                        ②static修饰的内部类

                                                   外部类名.内部类名  引用 = new 外部类.内部类();

    2.内部类定义在局部位置上(定义在方法内.例如上面的使用匿名内部类创建对象简化方式)

               只能在局部位置创建内部类的对象去访问.

               内部类在局部位置注意事项:

                            a.内部类可以直接访问外部类成员

                            b.内部类可以直接访问局部变量,局部变量必须使用final修饰

                            c.内部类中如果出现与外部类同名的成员.

                                             这个时候的this代表的是内部类对象,而要使用外部类

                                              需要   外部类名.this   这个代表的是外部类的对象

 

关于内部类声明在成员位置上时它的static修饰的问题

                            1.如果内部类使用static修饰,在内部类中就不能直接访问外部类的非static成员

                            2.如果内部类中有static成员,内部类必须使用static修饰.

                            3.如果内部类使用static修饰,那内部类的成员可以是static,也可以不是

 

内部类声明在成员位置上关于修饰符的补充:

              如果开发内部类一般会使用private,这时候只能适合我们所说的第一种方式方法

              如果是非private可是使用其他方式.

 

内部类产生的.class文件特点:

               在成员位置    外部类名$内部类名.class

               在局部位置    外部类名$序号内部类名.class

 

使用内部类的简化方式在以后的图形化界面中会经常使用.


 


------ android培训、java培训、期待与您交流! ----------