匿名内部类java内部类和匿名内部类的区别

匿名内部类  时间:2021-09-27  阅读:()

匿名内部类?

匿名类是不能有名称的类,所以没办法引用它们。

必须在创建时,作为new语句的一部分来声明它们。

这就要采用另一种形式的new语句,如下所示: new <类或接口> <类的主体> 这种形式的new语句声明一个新的匿名类,它对一个给定的类进行扩展,或者实现一个给定的接口。

它还创建那个类的一个新实例,并把它作为语句的结果而返回。

要扩展的类和要实现的接口是new语句的操作数,后跟匿名类的主体。

如果匿名类对另一个类进行扩展,它的主体可以访问类的成员、覆盖它的方法等等,这和其他任何标准的类都是一样的。

如果匿名类实现了一个接口,它的主体必须实现接口的方法。

java 代码 interface pr { void print1(); } public class noNameClass { public pr dest() { return new pr(){ public void print1() { System.out.println("Hello world!!"); } }; } public static void main(String args[]) { noNameClass c=new noNameClass(); pr hw=c.dest(); hw.print1(); } } pr也可以是一个类但是你外部调用的方法必须在你的这个类或接口中声明外部不能调用匿名类内部的方法 Java中内部匿名类用的最多的地方也许就是在Frame中加入Listner了吧。

如下: java 代码 import java.awt.*; import java.awt.event.*; public class QFrame extends Frame { public QFrame() { this.setTitle("my application"); addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { dispose(); System.exit(0); } }); this.setBounds(10,10,200,200); } } 内部匿名类,就是建立一个内部的类,但没有给你命名,也就是没有引用实例的变量。

new WindowAdapter() { public void windowClosing(WindowEvent e) { dispose(); System.exit(0); } } new 是建立一个 WindowAdapter对象 ,后面一个 {} 表示这个括号中的操作作用于这个默认的对名象,而上面的Java程序中后面是一个函数体。

这个用法的作用是:创建一个对象的实例,并且 override 它的一个函数。

打开 WindowAdapter 的代码可以发现。

它是一个抽象类。

它是对 WindowListener 接口的一个实现。

Frame.addWindowListner(); 的参数是一个 WindowListner ,而实现上是传一个从WindowAdapter 派生出的一个匿名类。

1.怎样判断一个匿名类的存在啊?看不见名字,感觉只是父类new出一个对象而已,没有匿名类的名字。

先看段伪代码 abstract class Father(){ .... } public class Test{ Father f1 = new Father(){ .... } //这里就是有个匿名内部类 } 一般来说,new 一个对象时小括号后应该是分号,也就是new出对象该语句就结束了。

但是出现匿名内部类就不一样,小括号后跟的是大括号,大括号中是该new 出对象的具体的实现方法。

因为我们知道,一个抽象类是不能直接new 的,必须先有实现类了我们才能new出它的实现类。

上面的伪代码就是表示new 的是Father的实现类,这个实现类是个匿名内部类。

其实拆分上面的匿名内部类可为 class SonOne extends Father{ ... //这里的代码和上面匿名内部类,大括号中的代码是一样的 } public class Test{ Father f1 = new SonOne() ; } 2.匿名内部类的注意事项 注意匿名类的声明是在编译时进行的,实例化在运行时进行。

这意味着for循环中的一个new语句会创建相同匿名类的几个实例,而不是创建几个不同匿名类的一个实例。

在使用匿名内部类时,要记住以下几个原则:  ·匿名内部类不能有构造方法。

 ·匿名内部类不能定义任何静态成员、方法和类。

 ·匿名内部类不能是public,protected,private,static。

 ·只能创建匿名内部类的一个实例。

·一个匿名内部类一定是在new的后面,用其隐含实现一个接口或实现一个类。

 ·因匿名内部类为局部内部类,所以局部内部类的所有限制都对其生效。

·内部类只能访问外部类的静态变量或静态方法。

匿名类和内部类中的中的this : 有时候,我们会用到一些内部类和匿名类。

当在匿名类中用this时,这个this则指的是匿名类或内部类本身。

这时如果我们要使用外部类的方法和变量的话,则应该加上外部类的类名 3.匿名内部类的作用 Java的内部类和C++中的嵌套类有本质的不同:C++的嵌套类没有指向包装类的句柄。

仅仅表达一个封装的概念;但是Java的内部类不同,它可以访问包装类的成员(这表示它拥有指向包装类的句柄)。

匿名内部类是内部类的一种简化写法:return new Wrapper { ... }; 等价于:Wrapped extends Wrapper { ... } return new Wrapped(); 难道匿名内部类就只这一点作用吗? 考虑一下这样的case: interface ICount { int count(); } class Parent { int i = 0; int count() { return i++; } } 有一个类Child,它既想继承Parent的count()方法,又想实现ICount接口中的count方法,这个时候怎么办呢?内部类就可以大显身手了: class Child extends Parent { ICount getCount() { return new ICount { int i = 0; int count() { return (i *= 2); } } } } 至于你说的只有一个方法或者必须有返回值,这个倒是没有在语法上规定 , 所以应该不存在这一说法。

打字不易,如满意,望采纳。

请问JAVA中匿名内部类有什么用,举个例子,谢谢

public class ExamFrame extends JFrame { public ExamFrame() { init(); } public ExamFrame(ClientContext context) { this(); this.context = context; } public void init() { setSize(600, 500); setTitle("在线评测"); setContentPane(createContentPane()); //这里就使用了匿名内部类 addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { context.exit(ExamFrame.this, "是否离开!"); } }); } } 匿名内部类其实也是类的一种,它的使用是减少资源占用的一种方法,他减少了对象的生成,在完成相应功能后会被Java垃圾回收机制直接回收减少内存资源的占用提高系统执行效率,同时使用比较简单,一般情况下,匿名类常用在线程上也就是Thread的声明上.

JAVA中匿名内部类有什么用,举个例子

设计模式中的模板方法模式 public?abstract?class?BankTemplateMethod?{//?抽象类 ??//?具体方法 ??public?void?takeNumber()?{ ????System.out.println("取号排队"); ??} ??public?abstract?void?transact();?//?办理具体的业务,抽象方法 ??public?void?evaluate()?{ ????System.out.println("反馈评分"); ??} ??public?final?void?process()?{?//?模板方法,用final修饰,子类不能修改 ????this.takeNumber(); ????this.transact(); ????this.evaluate(); ??} }使用一般匿名内部类 lassClient{ ??publicstaticvoidmain(String[]args){ ????BankTemplateMethodbtm=newDrawMoney(); ????btm.process(); ????//?采用匿名内部类 ????BankTemplateMethodbtm2=newBankTemplateMethod(){ ??????publicvoidtransact(){//?重写业务方法 ????????System.out.println("我要存钱!"); ??????} ????}; ????btm2.process(); ????//?采用匿名内部类 ????BankTemplateMethodbtm3=newBankTemplateMethod(){ ??????publicvoidtransact(){//?重写业务方法 ????????System.out.println("我要理财!我这里有2000万韩币"); ??????} ????}; ????btm3.process(); ??} }还有就是GUI中给按钮啊什么什么的添加事件

java匿名内部类具体概念是什么,在什么地方用到?

匿名内部类首先是一个类的内部定义的,是用来帮助你这个外部类去更好的实现一些功能,没有那么神密的,主要用在向方法传递一个对象做为参数。

public void fun(new Person{ System.out.println("你好"); }); 向方法传了一个person的对象。

Person是外部类,匿名类只是一个类体,这个类体创建的对象上转型为Person的对象了。

java写一个简单的匿名内部类?

public class Test{ JButton jbt = new JButton(); jbt.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){} }); } 比较简单的一个按钮监听器实现

java内部类和匿名内部类的区别

展开全部 内部类包含匿名内部类, 内部类:匿名内部类,成员内部类,方法内部类. 其实只要你区分一下匿名内部类和其他内部类的写法对于他们的区别就很直观了. 匿名内部类:class outer{ Thread t1=new Thread(){//这就是匿名内部类,没有名字的内部类,写于类以内,继承或者实现一个方法,不可以被外部继承(没有名字怎么继承) //代码 } } 方法内部类是写于方法内部,可以被继承,但是方法内部类只能引用方法里的常量. 成员内部类,写于类中的,当做成员对待,属于类的内部类,至于继承和实现方面是最常用的.

美国高防云服务器 1核 1G 26元/月 香港/日本站群服务器 E5 16G 1600元/月 触摸云

触摸云国内IDC/ISP资质齐全商家,与香港公司联合运营, 已超8年运营 。本次为大家带来的是双12特惠活动,美国高防|美国大宽带买就可申请配置升档一级[CPU内存宽带流量选一]升档方式:CPU内存宽带流量任选其一,工单申请免费升级一档珠海触摸云科技有限公司官方网站:https://cmzi.com/可新购免费升档配置套餐:地区CPU内存带宽数据盘价格购买地址美国高防 1核 1G10M20G 26...

易探云(QQ音乐绿钻)北京/深圳云服务器8核8G10M带宽低至1332.07元/年起

易探云怎么样?易探云香港云服务器比较有优势,他家香港BGP+CN2口碑不错,速度也很稳定。尤其是今年他们动作很大,推出的香港云服务器有4个可用区价格低至18元起,试用过一个月的用户基本会续费,如果年付的话还可以享受8.5折或秒杀价格。今天,云服务器网(yuntue.com)小编推荐一下易探云国内云服务器优惠活动,北京和深圳这二个机房的云服务器2核2G5M带宽低至330.66元/年,还有高配云服务器...

CloudCone(12.95美元/月CN2 GT线路,KVM架构1 Gbps带宽

整理一下CloudCone商家之前推送的闪购VPS云服务器产品,数量有限,活动推出可能很快机器就售罄了,有需要美国便宜VPS云服务器的朋友可以关注一下。CloudCone怎么样?CloudCone服务器好不好?CloudCone值不值得购买?CloudCone是一家成立于2017年的美国服务器提供商,国外实力大厂,自己开发的主机系统面板,CloudCone主要销售美国洛杉矶云服务器产品,优势特点是...

匿名内部类为你推荐
潦草字潦草字的"的"怎么写?流量分析系统做流量分析的免费软件有吗流动比率计算公式流动比率和速动比率公式是怎么的啊,怎么计算啊?数据库系统概论数据库系统概论的重点是哪些章节?新中大软件新中大软件公司南京公司怎么样科达视频会议系统摩云视讯这家公司的视频会议系统怎么样?充电宝摄像机停车记录仪用充电宝怎么才能让后摄像头录像杭州工作室杭州那么多工作室,怎么挑选呢?是影楼好还是工作室好?上海长宽要装长城宽带了,看到网上对长宽网速的评价,那个忐忑啊! 有谁是上海长宽的用户吗?你用的网速怎样呢?例外招聘银行校园招聘和合同制柜员有什么区别?
美国便宜货网站 Hello图床 ixwebhosting realvnc 亚洲小于500m 中国电信测速112 91vps 网游服务器 网站加速 睿云 windowsserver2012r2 web是什么意思 hosting 带宽测速 电脑显示屏不亮但是主机已开机 云主机 主机游戏 国外bt下载网站 sockscap怎么用 web服务器安全配置 更多