[好程序员笔记分享]35 内部类和匿名内部类

时间:2023-01-02 16:56:08

android培训 ------我的java笔记,期待与您交流!

内部类常实现监听、内部线程等
1、什么是内部类
class A{
 class B{
 
 }
}
编译生成A$B.class(外部类$内部类.class)
[好程序员笔记分享]35 内部类和匿名内部类

class Test{
 public static void main(String args[]){
  A a = new A();
 
  A.B b = new A().new B();//生成内部类对象,必须有外部类对象
 }
}
因此内部类可以使用外部类的成员变量和成员函数。

2、内部类的使用方法
A.java
class A{
 int i;
 class B{
  int j;
  int funB(){
   int result = i + j;
   System.out.println(result);
   return result;
  }
 }
}

Test.java
class Test{
 public static void main(String args[]){
  A a = new A();
 
  A.B b = a.new B();//生成内部类对象,必须有外部类对象
  a.i = 3;
  b.j = 1;
  b.funB();
 }
}

[好程序员笔记分享]35 内部类和匿名内部类
3、匿名内部类的使用方法


A.java
interface A{
 public void doSomething();
}

B.java
class B{
 public void fun(A a){
  System.out.println("B fun");
  a.doSomething();
 }
}

AImpl.java
class AImpl implements A{
 public void doSomething(){
  System.out.println("AImpl doSomething");
 }
}

Test.java
class Test{
 public static void main(String args[]){
  AImpl aImpl = new AImpl();
  A a = aImpl;
 
  B b = new B();
  b.fun(a);
 }
}

[好程序员笔记分享]35 内部类和匿名内部类

将Test.java改为匿名内部类
class Test{
 public static void main(String args[]){
  //AImpl aImpl = new AImpl();
  //A a = aImpl;
 
  B b = new B();
  b.fun(new A(){
   public void doSomething(){
    System.out.println("匿名内部类doSomething()");
   }
  });
 }
}
[好程序员笔记分享]35 内部类和匿名内部类