Java4Android第11课:内部类和匿名内部类

转载 2016年06月01日 16:18:40

内部类不是很好理解,但说白了其实也就是一个类中还包含着另外一个类

如同一个人是由大脑、肢体、器官等身体结果组成,而内部类相当于其中的某个器官之一,例如心脏:它也有自己的属性和行为(血液、跳动)

显然,此处不能单方面用属性或者方法表示一个心脏,而需要一个类

而心脏又在人体当中,正如同是内部类在外部内当中

 

实例1:内部类的基本结构

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
//外部类
class Out {
    private int age = 12;
     
    //内部类
    class In {
        public void print() {
            System.out.println(age);
        }
    }
}
 
public class Demo {
    public static void main(String[] args) {
        Out.In in = new Out().new In();
        in.print();
        //或者采用下种方式访问
        /*
        Out out = new Out();
        Out.In in = out.new In();
        in.print();
        */
    }
}

运行结果:12

从上面的例子不难看出,内部类其实严重破坏了良好的代码结构,但为什么还要使用内部类呢?

因为内部类可以随意使用外部类的成员变量(包括私有)而不用生成外部类的对象,这也是内部类的唯一优点

如同心脏可以直接访问身体的血液,而不是通过医生来抽血

 

程序编译过后会产生两个.class文件,分别是Out.class和Out$In.class

其中$代表了上面程序中Out.In中的那个 .

Out.In in = new Out().new In()可以用来生成内部类的对象,这种方法存在两个小知识点需要注意

  1.开头的Out是为了标明需要生成的内部类对象在哪个外部类当中

  2.必须先有外部类的对象才能生成内部类的对象,因为内部类的作用就是为了访问外部类中的成员变量


实例2:静态内部类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Out {
    private static int age = 12;
     
    static class In {
        public void print() {
            System.out.println(age);
        }
    }
}
 
public class Demo {
    public static void main(String[] args) {
        Out.In in = new Out.In();
        in.print();
    }
}

运行结果:12

可以看到,如果用static 将内部内静态化,那么内部类就只能访问外部类的静态成员变量,具有局限性

其次,因为内部类被静态化,因此Out.In可以当做一个整体看,可以直接new 出内部类的对象(通过类名访问static,生不生成外部类对象都没关系)


实例3:在接口上使用匿名内部类

interface Person {
    public void eat();
}
 
public class Demo {
    public static void main(String[] args) {
        Personp = new Person() {
          public void eat() {
                System.out.println("eat something");
          }
        };
        p.eat();
    }
}

运行结果:eat something

 Person是一个接口,不能生成对象。所以new Person()后面必须跟着Person接口的实现类,也就是{......}。这个类没有名字,并且是在Demo类内部实现的,所以称它为匿名内部类。

由上面的例子可以看出,只要一个类是抽象的或是一个接口,那么其子类中的方法都可以使用匿名内部类来实现


java基础四种匿名内部类

  • 2017年08月09日 23:08
  • 42.78MB
  • 下载

浅析Java匿名内部类在Android事件响应中的应用

浅析Java匿名内部类在Android事件响应中的应用,本文介绍内容包括两方面:对匿名内部类的理解和分析匿名内部类在Android中的使用。在阅读本文之前,你首先要对Java匿名内部类和android...

Java 匿名内部类

  • 2017年08月02日 22:58
  • 6KB
  • 下载

java中的匿名内部类总结

  • 2013年10月09日 21:57
  • 30KB
  • 下载

java匿名内部类使用外部变量时,外部变量必须是final,为什么?

转自:http://blog.csdn.net/u011617742/article/details/516135191,Java中的匿名内部类是如何实现的? 先定义一个接口: public in...

java 匿名内部类的使用规范

  • 2010年06月21日 15:01
  • 59KB
  • 下载

JAVA_匿名内部类

  • 2012年08月16日 12:56
  • 64KB
  • 下载

Java的匿名内部类与Lambda表达式

匿名内部类匿名内部类适合只需要使用一次的类,创建匿名内部类时会立即创建一个该类的实例。定义匿名内部类new 接口() | 父类构造器(实参列表) {} 匿名内部类必须继承一个父类,或实现一个接口。1)...

Java4Android 35_内部类和匿名内部类

  • 2014年09月07日 11:51
  • 21.55MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java4Android第11课:内部类和匿名内部类
举报原因:
原因补充:

(最多只允许输入30个字)