匿名内部类-细节

 1 //1
 2         new Object(){
 3             void show(){
 4                 System.out.println("show run");
 5             }
 6         }.show();
 7         //2
 8         Object obj = new Object(){
 9             void show(){
10                 System.out.println("show run");
11             }
12         };
13         obj.show();
14
15 
  1和2的写法正确吗?有区别吗?说出原因。
16         写法是正确,1和2都是在通过匿名内部类建立一个Object类的子类对象。
17         区别:
18         第一个可是编译通过,并运行。
19         第二个编译失败,因为匿名内部类是一个子类对象,当用Object的obj引用指向时,就被提升为了
20         Object类型,而编译时检查Object类中是否有show方法,所以编译失败。

-----------
 1 class InnerClassDemo6 {
 2     +(static)class Inner{
 3         void show(){}
 4     }
 5     public void method(){
 6         this.new Inner().show();//可以
 7     }
 8     public static void main(String[] args) {//static不允许this
 9         This.new Inner().show();//错误,Inner类需要定义成static
10     }
11 }

---------------------------

 1 interface Inter{
 2     void show();
 3 }
 4 class Outer{//通过匿名内部类补足Outer类中的代码。
 5     public static Inter method(){
 6         return new Inter(){
 7             public void show(){}
 8         };
 9     }
10 }
11 class InnerClassDemo7 {
12     public static void main(String[] args) {
13         Outer.method().show();
14     /*
15         Outer.method():意思是:Outer中有一个名称为method的方法,而且这个方法是静态的。
16         Outer.method().show():当Outer类调用静态的method方法运算结束后的结果又调用了show方法,意味着:method()方法运算完一个是对象,而且这个对象是Inter类型的。
17     */
18         function (new Inter(){
19             public void show(){}
20         }); //匿名内部类作为方法的参数进行传递。
21     }
22     public static void function(Inter in){
23         in.show();
24     }
25 }
时间: 2024-10-12 05:32:02

匿名内部类-细节的相关文章

13. JavaSE-多态 & 内部类

多态:某一事物的多种存在形态:简单说.就是一个对象对应不同的类型 例如:对象多态性 Class 动物{} Class 猫 extends 动物{} 猫 x= new 猫() 动物 y= new 猫() 猫这类事物即具备猫的形态,又具备动物的形态:这就是对象的多态性 多态在代码中的体现:父类或者接口的引用指向其子类的对象 多态的好处:提高代码扩展性,前期定义的代码可以使用后期的内容(被重写的父类或者接口中的抽象方法) 多态弊端:前期定义的内容不能使用(调用)后期子类特有的内容 多态的前提:必须有关

历经5年锤炼(史上最适合初学者入门的Java基础视频)--视频列表

\JavaSE基础视频01\01-计算机语言概述.avi;\JavaSE基础视频01\02-Java语言的跨平台原理(JVM).avi;\JavaSE基础视频01\03-Java语言(JDK&JRE).avi;\JavaSE基础视频01\04-Java语言(JDK的下载与安装).avi;\JavaSE基础视频01\05-Java语言(JDK中的命令行工具).avi;\JavaSE基础视频01\06-Java语言(命令行简介).avi;\JavaSE基础视频01\07-Java语言(环境变量配置)

面向对象、匿名内部类

1 内部类 1.1 内部类的概述 将类定义在另一个类的内部则成为内部类.其实就是类定义的位置发生了变化. 在一个类中,定义在类中的叫成员变量,定义在函数中的叫成员函数,那么根据类定义的位置也可以分为成员内部类和局部内部类. 备注:内部类生产的class文件为 “外部类$内部类”,为了标明该内部类是属于具体哪个外部类的. 1.2 成员内部类的访问方式 内部类可以直接访问外部类的成员属性.(孙悟空相当于内部类飞到牛魔王的肚子里面去). 外部类需要访问内部类的成员属性时需要创建内部类的对象. 在外部类

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 什么时候从内存中消失?

【Java学习笔记之二十六】深入理解Java匿名内部类

在[Java学习笔记之二十五]初步认知Java内部类中对匿名内部类做了一个简单的介绍,但是内部类还存在很多其他细节问题,所以就衍生出这篇博客.在这篇博客中你可以了解到匿名内部类的使用.匿名内部类要注意的事项.如何初始化匿名内部类.匿名内部类使用的形参为何要为final. 一.使用匿名内部类内部类 匿名内部类由于没有名字,所以它的创建方式有点儿奇怪.创建格式如下: new 父类构造器(参数列表)|实现接口() { //匿名内部类的类体部分 } 在这里我们看到使用匿名内部类我们必须要继承一个父类或者

java提高篇(九)-----详解匿名内部类

摘自http://blog.csdn.net/chenssy/article/details/13170015 java提高篇(九)-----详解匿名内部类 在Java提高篇-----详解内部类中对匿名内部类做了一个简单的介绍,但是内部类还存在很多其他细节问题,所以就衍生出这篇博客.在这篇博客中你可以了解到匿名内部类的使用.匿名内部类要注意的事项.如何初始化匿名内部类.匿名内部类使用的形参为何要为final. 一.使用匿名内部类内部类 匿名内部类由于没有名字,所以它的创建方式有点儿奇怪.创建格式

java提高篇(十)-----详解匿名内部类 ,形参为什么要用final

在java提高篇-----详解内部类中对匿名内部类做了一个简单的介绍,但是内部类还存在很多其他细节问题,所以就衍生出这篇博客.在这篇博客中你可以了解到匿名内部类的使用.匿名内部类要注意的事项.如何初始化匿名内部类.匿名内部类使用的形参为何要为final. 一.使用匿名内部类内部类 匿名内部类由于没有名字,所以它的创建方式有点儿奇怪.创建格式如下: new 父类构造器(参数列表)|实现接口() { //匿名内部类的类体部分 } 在这里我们看到使用匿名内部类我们必须要继承一个父类或者实现一个接口,当

【转】java提高篇(十)-----详解匿名内部类

原文网址:http://www.cnblogs.com/chenssy/p/3390871.html 在java提高篇-----详解内部类中对匿名内部类做了一个简单的介绍,但是内部类还存在很多其他细节问题,所以就衍生出这篇博客.在这篇博客中你可以了解到匿名内部类的使用.匿名内部类要注意的事项.如何初始化匿名内部类.匿名内部类使用的形参为何要为final. 一.使用匿名内部类内部类 匿名内部类由于没有名字,所以它的创建方式有点儿奇怪.创建格式如下: new 父类构造器(参数列表)|实现接口() {

关于java的final、接口、内部类细节

一.final关键字 final关键字大概可以分成三部分讨论:final数据.方法.类 首先是数据: final数据在恒定不变的时候是很有用的,比如: 1.一个永不改变的编译时常量 2.一个在运行时被初始化的值,而你不希望它被改变 而一个static final的域只是占据一段不能改变的存储空间 细节: 1.如果是final的基本数据类型:那么这个数值是恒定不变,而final的对象引用,那么这个引用是不能改变,但是引用里面的内容是可以被修改的,如: final int[] a = {1.2.3.