Java 内部类和匿名内部类

1.内部类:

 1 /*
 2 局部内部类: 在一个类 的方法内部定义另外一个类,那么另外一个类就称作为局部内部类。
 3
 4 局部内部类要注意的细节:
 5     1. 如果局部 内部类访问了一个局部变量,那么该局部变量必须使用final修饰、
 6
 7
 8 */
 9 class  Outer{
10
11     String name= "外部类的name";
12
13     public void test(){
14         //局部变量
15         final    int y =100;  // y 什么时候从内存中消失? 方法执行完毕之后y消失。
16
17         //局部内部类
18         class Inner{     /*
19                             当test方法执行完毕之后,那么y马上从内存中消失,而Inner对象在方法
20                             执行完毕的时候还没有从内存中消失,而inner对象的print方法还在访问着
21                             y变量,这时候的y变量已经消失了,那么就给人感觉y的生命变量已经被延长了
22                             .
23
24                             解决方案: 如果一个局部内部类访问一个局部变量的时候,那么就让该局部内部类
25                             访问这个局部 变量 的复制品。
26                         */
27             int x = 10;
28
29             public void print(){
30                 System.out.println("这个是局部内部类的print方法.."+y);
31             }
32         }
33
34         Inner inner = new Inner();  //这个inner对象什么时候消失?  Inner对象的生命周期比局部变量y的生命周期要长。
35         inner.print();
36     }
37
38
39 }
40
41
42 class Demo5
43 {
44     public static void main(String[] args)
45     {
46         Outer outer = new Outer();
47         outer.test();
48     }
49 }

注意特点:如果没有statice,那就要对内部类进行实例化,让其成为对象。如果有statice,那么就只用实例化外部类就可以了。内部类与外部类的方法是平级的。

2.匿名内部类:

  1.继承下的的匿名内部类

 1 /*
 2
 3 匿名内部类:没有类名的类就称作为匿名内部类。
 4
 5 匿名内部类的好处:简化书写。
 6
 7 匿名内部类的使用前提:必须存在继承或者实现关系才能使用。
 8
 9
10 匿名内部类一般是用于实参。
11
12 */
13
14 abstract class Animal{
15
16     public abstract Animal run();
17
18     public abstract void sleep();
19 }
20
21 class Outer{
22
23     public void print(){
24         //需求: 在方法内部定义一个类继承Animal类,然后调用run方法与sleep()。
25
26         /*
27         //局部内部类
28         class Dog extends Animal{
29
30             public void run(){
31                 System.out.println("狗在跑..");
32             }
33
34             public void sleep(){
35                 System.out.println("狗趴在睁开眼睛睡..");
36             }
37         }
38
39         //创建对象
40         Dog d = new Dog();
41         d.run();
42         d.sleep();
43         */
44         //匿名内部类 :匿名内部类只是没有类名,其他的一概成员都是具备的。
45         // 匿名内部类与Animal是继承 的关系。  目前是创建Animal子类的对象.
46     Animal    a = new Animal(){  //多态
47
48             //匿名内部的成员
49             public Animal run(){
50                 System.out.println("狗在跑..");
51                 return this;
52             }
53
54             public void sleep(){
55                 System.out.println("狗趴在睁开眼睛睡..");
56             }
57
58             //特有的方法
59             public void bite(){
60                 System.out.println("狗在咬人..");
61             }
62
63         };
64
65         a.bite();
66         a.run();
67         a.sleep();
68
69     }
70 }
71
72 class Demo6
73 {
74     public static void main(String[] args)
75     {
76         //System.out.println("Hello World!");
77
78         Outer outer = new Outer();
79         outer.print();
80
81     }
82 }

  2.接口实现下的匿名内部类

 1 //实现关系下匿名内部类
 2 interface Dao{
 3
 4     public void add();
 5 }
 6 class Outer{
 7
 8     public void print(){
 9         //创建一个匿名内部类的对象
10         new Dao(){   //不是接口不能创建对象吗?怎么现在又可以了?
11
12              public void add(){
13                 System.out.println("添加成功");
14              }
15         }.add();
16     }
17 }
18
19 class Demo7
20 {
21     public static void main(String[] args)
22     {
23         test(new Dao(){
24
25             public void add(){
26                 System.out.println("添加员工成功");
27             }
28         });
29
30
31     }
32     //调用这个方法...
33     public static void  test(Dao d){  //形参类型是一个接口引用..
34         d.add();
35     }
36 }
时间: 2024-11-02 23:37:48

Java 内部类和匿名内部类的相关文章

Java内部类:匿名内部类(四)

Java内部类分为4个部分进行阐述,分别为概览.成员内部类.局部内部类和匿名内部类. 在本文中是Java内部类的匿名内部类,主要讲述匿名内部类的概念.匿名内部类的好处.匿名内部类的使用前提.和匿名内部类的应用场景. 1.匿名内部类的概念 没有类名的类就称作为匿名内部类 2.匿名内部类的好处 简化书写 3.匿名内部类的使用前提 必须存在继承或者实现关系才能使用 4.匿名内部类的应用场景 匿名内部类一般是用于实参 示例代码: package com.rk.innerclass; public cla

java内部类和匿名内部类

内部类即是包含在类里面的又一个类. java内部类分为: 成员内部类.静态嵌套类.方法内部类.匿名内部类 . 内部类的共性 (1).内部类仍然是一个独立的类,在编译之后内部类会被编译成独立的.class文件,但是前面冠以外部类的类名和$符号 . (2).内部类不能用普通的方式访问.内部类是外部类的一个成员,因此内部类可以自由地访问外部类的成员变量,无论是否是private的 . (3).内部类声明成静态的,就不能随便的访问外部类的成员变量了,此时内部类只能访问外部类的静态成员变量 . 成员内部类

java 内部类、匿名内部类

一:内部类 1:什么是内部类? 大部分时候,类被定义成一个独立的程序单元.在某些情况下,也会把一个类放在另一个类的内部定义,这个定义在其他类内部的类就被称为内部类(有些地方也叫做嵌套类),包含内部类的类也被称为外部类(有些地方也叫做宿主类) 我们先创建一个基本的内部类结构: class Outer{//外部类 //内部类 class Inner{ } } 2:内部类的划分 内部类分为成员内部类和局部内部类.内部类也会生成.class文件. 2.1: 成员内部类 定义在外部类中的成员位置,与类中的

Java内部类之匿名内部类

??我们都知道Java中可以使用内部类,将一个类的定义放在另一个类的定义的内部,这就是内部类,但是匿名内部类往往使我们摸不着头脑,因为它并没有特定的名称,那么该如何使用它呢? 定义一个匿名内部类 public interface Contents { int value(); } public class Test1 { private Contents contents() { return new Contents() { private int i = 11; @Override publ

深入理解java内部类和匿名内部类

1.如果有人问你在java中接口可以new吗?我想答案应该是yes,实现匿名内部类的时候. http://blog.csdn.net/cntanghai/article/details/6094481 2.如果有人问你类是否可以被private等修饰,我想答案是yes,内部类的好处之一. 1.内部类可以很好的实现隐藏 一般的非内部类,是不允许有 private 与protected权限的,但内部类可以 2.内部类拥有外围类的所有元素的访问权限 3.可是实现多重继承 4.可以避免修改接口而实现同一

java 内部类、匿名内部类、嵌套类的使用

我们都知道java的类可以由public.default(缺省.不写)来修饰,分别表示的含义是允许公开访问以及只允许包内其它类访问,而同一包内的类通常是为完成同一个功能而协作. 除此之外,我们还会遇到一些类,它们只是其它某个类的实现或组成的一部分,它们不应该被独立的创建出来,当它们创建的时候需要跟"宿体"连在一块,这就是内部类.就好像人类的心脏,你没法单独的new一个出来,它只能依赖于人体而存活(这本来就是它存在的目的),至少现代医学做不到离体存活,现代医学能做的只是把一个心脏取出来,

java 内部类3(匿名内部类)

匿名内部类: 1.没有类名的类就叫匿名内部类 2.好处:简化书写. 3.使用前提:必须有继承或实现关系......不要想着你自己没有钱你没可是你爸有 4.一般用于于实参.(重点) class Outer{ class Inner{ public void show(){ System.out.println(“内部累的show方法”); } } public void print(){ new Inner().show(); } }

Java内部类小程序(成员内部类,静态内部类,匿名内部类)

1 /** 2 * 测试java内部类(成员内部类,静态内部类,匿名内部类) 3 * 局部内部类不常用,就不写了. 4 * @package :java05 5 * @author shaobn 6 * @Describe : 7 * @Time: 2015-9-6 下午8:32:38 8 */ 9 public class TestInner { 10 11 /** 12 * @author shaobn 13 * @Describe : 14 * @param args 15 * @Time

Java内部类详解--成员内部类,局部内部类,匿名内部类,静态内部类

说起内部类这个词,想必很多人都不陌生,但是又会觉得不熟悉.原因是平时编写代码时可能用到的场景不多,用得最多的是在有事件监听的情况下,并且即使用到也很少去总结内部类的用法.今天我们就来一探究竟.下面是本文的目录大纲: 一.内部类基础 二.深入理解内部类 三.内部类的使用场景和好处 四.常见的与内部类相关的笔试面试题 若有不正之处,请多谅解并欢迎批评指正. 请尊重作者劳动成果,转载请标明原文链接: http://www.cnblogs.com/dolphin0520/p/3811445.html 一