Java从零开始-学习笔记

高级-内部类

2018-01-27  本文已影响0人  学Java的小姑凉

一、内部类

   一个类定义在另一个类内部时称为内部类。
   形式:
   public class A
   {
   private class B{}
   }
  这里,特别的是,每个内部类也对应一个.class文件。形式“外部类$内部类.class”,例如A$B.class。
  在定义内部类时,我们会使用private来修饰。

  当然也可以定义为public,但是在调用时需要(必须要先创建外部类的引用,再创建外部类的引用):
  A a=new A(); A.B b=new A.B();
  这样使用起来有点别扭,毕竟定义内部类的目的就是内部使用,外部调用使内部类的定义没有什么意义。

二、内部类的使用

   内部类和外部类的关联比较紧密。
   public class A
   {
   private string a;
   private void show()
   {system.out.println(a);}

   private class B
   {
   public void setB()
   {
   A.this.a="name";
   A.this.show();
   }
   }

   public void test()
   {
   B b=new B();
   b.setB();//测试
   }}

   在main函数中,调用A a=new A();a.test();//返回“name”
   如果想要在外面实现简单的调用的话,只要将内部类定义为静态static。
   但是这样的话,跟定义一个普通类没有什么区别,不能使用外部类.this来调用外部类的属性和方法。

三、匿名内部类

   在内部类的定义时,我们会使用匿名内部类。
   定义一个接口:
   public interface radio
   {
   public void play(string filename);
   }
   定义内部类时:
   public class A
   {
   private string a;
   private void show()
   {system.out.println(a);}

   public void test()
   {
   radio a=new radio()//匿名内部类
   {
   public void play(string filename)
   {system.out.println("hahahaha...");}
   }
   a.play("123");
   }
   }
   这里接口radio直接创建对象,没有名称。生成时对应一个.class文件。文件名:外部类$1.class。

内部类学习难度有点大,下次可以迭代学习。

上一篇下一篇

猜你喜欢

热点阅读