1.内部类:

 /*
局部内部类: 在一个类 的方法内部定义另外一个类,那么另外一个类就称作为局部内部类。 局部内部类要注意的细节:
1. 如果局部 内部类访问了一个局部变量,那么该局部变量必须使用final修饰、 */
class Outer{ String name= "外部类的name"; public void test(){
//局部变量
final int y =100; // y 什么时候从内存中消失? 方法执行完毕之后y消失。 //局部内部类
class Inner{ /*
当test方法执行完毕之后,那么y马上从内存中消失,而Inner对象在方法
执行完毕的时候还没有从内存中消失,而inner对象的print方法还在访问着
y变量,这时候的y变量已经消失了,那么就给人感觉y的生命变量已经被延长了
. 解决方案: 如果一个局部内部类访问一个局部变量的时候,那么就让该局部内部类
访问这个局部 变量 的复制品。
*/
int x = 10; public void print(){
System.out.println("这个是局部内部类的print方法.."+y);
}
} Inner inner = new Inner(); //这个inner对象什么时候消失? Inner对象的生命周期比局部变量y的生命周期要长。
inner.print();
} } class Demo5
{
public static void main(String[] args)
{
Outer outer = new Outer();
outer.test();
}
}

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

2.匿名内部类:

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

 /*

 匿名内部类:没有类名的类就称作为匿名内部类。

 匿名内部类的好处:简化书写。

 匿名内部类的使用前提:必须存在继承或者实现关系才能使用。

 匿名内部类一般是用于实参。

 */

 abstract class Animal{

     public abstract Animal run();

     public abstract void sleep();
} class Outer{ public void print(){
//需求: 在方法内部定义一个类继承Animal类,然后调用run方法与sleep()。 /*
//局部内部类
class Dog extends Animal{ public void run(){
System.out.println("狗在跑..");
} public void sleep(){
System.out.println("狗趴在睁开眼睛睡..");
}
} //创建对象
Dog d = new Dog();
d.run();
d.sleep();
*/
//匿名内部类 :匿名内部类只是没有类名,其他的一概成员都是具备的。
// 匿名内部类与Animal是继承 的关系。 目前是创建Animal子类的对象.
Animal a = new Animal(){ //多态 //匿名内部的成员
public Animal run(){
System.out.println("狗在跑..");
return this;
} public void sleep(){
System.out.println("狗趴在睁开眼睛睡..");
} //特有的方法
public void bite(){
System.out.println("狗在咬人..");
} }; a.bite();
a.run();
a.sleep(); }
} class Demo6
{
public static void main(String[] args)
{
//System.out.println("Hello World!"); Outer outer = new Outer();
outer.print(); }
}

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

 //实现关系下匿名内部类
interface Dao{ public void add();
}
class Outer{ public void print(){
//创建一个匿名内部类的对象
new Dao(){ //不是接口不能创建对象吗?怎么现在又可以了? public void add(){
System.out.println("添加成功");
}
}.add();
}
} class Demo7
{
public static void main(String[] args)
{
test(new Dao(){ public void add(){
System.out.println("添加员工成功");
}
}); }
//调用这个方法...
public static void test(Dao d){ //形参类型是一个接口引用..
d.add();
}
}

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

  1. java内部类和匿名内部类

    内部类即是包含在类里面的又一个类. java内部类分为: 成员内部类.静态嵌套类.方法内部类.匿名内部类 . 内部类的共性 (1).内部类仍然是一个独立的类,在编译之后内部类会被编译成独立的.clas ...

  2. java 内部类、匿名内部类

    一:内部类 1:什么是内部类? 大部分时候,类被定义成一个独立的程序单元.在某些情况下,也会把一个类放在另一个类的内部定义,这个定义在其他类内部的类就被称为内部类(有些地方也叫做嵌套类),包含内部类的 ...

  3. Java内部类之匿名内部类

      我们都知道Java中可以使用内部类,将一个类的定义放在另一个类的定义的内部,这就是内部类,但是匿名内部类往往使我们摸不着头脑,因为它并没有特定的名称,那么该如何使用它呢? 定义一个匿名内部类 pu ...

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

    我们都知道java的类能够由public.default(缺省.不写)来修饰,分别表示的含义是同意公开訪问以及仅仅同意包内其他类訪问,而同一包内的类一般是为完毕同一个功能而协作.      除此之外, ...

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

    匿名内部类: 1.没有类名的类就叫匿名内部类 2.好处:简化书写. 3.使用前提:必须有继承或实现关系......不要想着你自己没有钱你没可是你爸有 4.一般用于于实参.(重点) class Oute ...

  6. Java中的内部类(成员内部类、静态内部类、局部内部类、匿名内部类)

    Java中的内部类(成员内部类.静态内部类.局部内部类.匿名内部类) 神话丿小王子的博客主页 我们先看这样一段话:人是由大脑.肢体.器官等身体结果组成.而组成我们人体的心脏它也有自己的属性和行为(血液 ...

  7. java之内部类(InnerClass)----非静态内部类、静态内部类、局部内部类、匿名内部类

    提起java内裤类(innerClass)很多人不太熟悉,实际上类似的概念在c++里面也有,那就是嵌套类(Nested Class),关于这俩者的区别,在下文中会有对比.内部类从表面上看,就是在类中定 ...

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

    /** * 测试java内部类(成员内部类,静态内部类,匿名内部类) * 局部内部类不常用,就不写了. * @package :java05 * @author shaobn * @Describe ...

  9. Java 内部类、静态内部类、匿名内部类

    java提高篇(八)----详解内部类 概念 可以将一个类的定义放在另一个类的定义内部,这就是内部类. 为什么要使用内部类?在<Think in java>中有这样一句话:使用内部类最吸引 ...

随机推荐

  1. flume 以 kafka 为channel 的配置

    #此配置以kafka的一个topic为channel,相比其他channel类型 file和cache 兼并了快和安全的要求!# Define a kafka channel a1.channels. ...

  2. zabbix 布署实践【3 proxy安装】

    使用openstack在生产环境创建的一台虚拟机   环境 CentOS7 4核4G内存40G硬盘 IP:10.120.150.150 镜像默认关闭防火墙,selinux ,NetworkManage ...

  3. 【.NET】Repeater控件简单的数据绑定(有bool,日期,序号)

    前述: 讲的是Repeater,使用的是XML文件读取,没用ADO.NET ,而分页有很多方法,比如用PagedDataSource,或者通过参数在数据源写SQL语句来实现. 页面: <%@ I ...

  4. vue跨组件通信的几种方法

    http://www.tuicool.com/articles/jyM32mA 在开发组件的时候,一定会遇到组件的通信,比如点击一个图标出现弹窗和蒙层,这三个分别是不同的组件.管理他们之间的状态就成了 ...

  5. c#语言简介

    语言的历史:c,c++,java,c#, c语言最早,c++语言复杂,而java把其中难的一部分去掉,也成为c--,而c#早期类似java. c#简单高效,并且与web结合. C#的运行环境是.net ...

  6. AnimatorController反向运动学IK

    通过使用反向运动学IK,我们可以根据需要控制角色身体某个特定部位进行旋转或移动,达到想要的一些效果,比如:在移动时,让一只脚带伤拖行:让手抬起去拿桌上的苹果:让脑袋一直面向我们的色像机,就像一直注视着 ...

  7. E - Cup 2(dfs)

    E - Cup 2 Time Limit:2000MS     Memory Limit:65536KB     64bit IO Format:%lld & %llu Submit Stat ...

  8. js的兼容技巧

    javascript原生代码中经常会遇到各式各样浏览器不兼容的问题,浏览器真是倔强,解决浏览器的兼容是前端猿们的一大难题 为了避免在工作中遇到这些简单的问题.节约开发时间,在这里总结一些常用的浏览器兼 ...

  9. 浏览器exp使用经验

    0x00背景 windows平台下,浏览器安全是绕不过的话题,其涉及的安全问题涵盖二进制和web,攻击场景也非常多样化: 用户点击攻击者的恶意URL链接被感染恶意代码 访问恶意站点被绕过同源策略窃取c ...

  10. JAVA内容回顾(一)——基本语法

    一.基本数据类型 1.标识符. 标识符由字母.数字.下划线和美元符组成. 标识符不能是JAVA的关键字与保留字,但是可以包含其内. 标识符区分大小写.标识符长度没有限制.标识符不能含有空格. 2.注释 ...