Android ch02

Android 很重要的内部类,基本上都是内部类

一、 成员内部类(不对外开放,高机密)

  成员内部类也是定义在另一个类中,但是定义时不用static修饰。

  成员内部类和静态内部类可以类比为非静态的成员变量和静态的成员变量。

  成员内部类就像一个实例变量。

  它可以访问它的外部类的所有成员变量和方法,不管是静态的还是非静态的都可以

 1 package memberinner;
 2 
 3 public class Test {
 4     
 5     class B {
 6         public void go() {
 7             System.out.println("这里是秘密");
 8         }
 9     }
10     
11     public void show () {
12         B b = new B();
13         b.go();
14     }
15     
16     public static void main(String[] args) {
17         new Test().show();
18     }
19     
20 }

二、 方法内部类 (短暂的,不对外的,非全局的,局部的一种)

  局部内部类定义在方法中,比方法的范围还小。是内部类中最少用到的一种类型。

  像局部变量一样,不能被public, protected, private和static修饰。

  只能访问方法中定义的final类型的局部变量。

  局部内部类在方法中定义,所以只能在方法中使用,即只能在方法当中生成局部内部类的实例并且调用其方法。

  1. 先创建一个  

1 package methodinner;
2 
3 public class Duanzanshichang {
4     
5     public void noProblem() {
6         System.out.println("我有病");
7     }
8     
9 }

  可以在别的类中调用  

 1 package methodinner;
 2 
 3 public class Test {
 4     
 5     public void driver() {
 6         System.out.println("我正在开车");
 7         
 8         class B extends Duanzanshichang {
 9             
10         }
11         new B().noProblem();
12 //        System.out.println("撞死人");//变成没事
13         System.out.println("一切恢复正常");//变成没事
14     }
15     
16     public static void main(String[] args) {
17         new Test().driver();
18     }
19     
20 }

三、 匿名内部类 (Anonymous inner class)

  匿名内部类就是没有名字的局部内部类,不使用关键字class, extends, implements, 没有构造方法。

  匿名内部类隐式地继承了一个父类或者实现了一个接口

  匿名内部类使用得比较多,通常是作为一个方法参数。

  先定义一个 抽象类 

1 public interface QinShou {
2     public void workInNight();
3 }

  再定义一个抽象 Doctor 类 实现 QinShou

1 package anonymousinner;
2 
3 public abstract class Doctor implements QinShou {
4     public void workInDay() {
5         System.out.println("白天传授理论知识");
6     }
7 }

  就可以在 测试 类那里测试了

 1 package anonymousinner;
 2 
 3 public class Test {
 4      public static void main(String[] args) {
 5         Doctor1 d1 = new Doctor1();
 6         d1.workInDay();
 7         d1.workInNight();
 8         
 9         Doctor2 d2 = new Doctor2();
10         d2.workInDay();
11         d2.workInNight();
12         
13         // 匿名内部类
14         // new 一个抽象类 或者 接口
15         // 加上一个花括号
16         // 给他添加上实现的方法
17         Doctor d3 = new Doctor(){
18 
19             public void workInNight() {
20                 System.out.println("晚上教你 ABC");
21             }
22             
23         };
24         d3.workInDay();
25         d3.workInNight();
26     }
27 }

  上面代码的 d3 就是实现匿名内部类啦

  

原文地址:https://www.cnblogs.com/lwchehe/p/6068125.html