java匿名内部类返回值_java匿名内部类
java的内部类可以玩出好多花样。介绍都挺多,我就不废话了。专门记一下困惑了我好半天的匿名内部类。
总结一下:
1.匿名内部类通常是为了省事(直接获取一个类实例,这个类实例只在此处用一次,就省得再给它起个名字重新定义了)。所以原则是尽量简单。如果用了这个方法,给读代码的人带来很大困惑,那就得不偿失了
2.匿名内部类不能有构造方法
3.匿名内部类不能定义静态变量、方法和类
4.匿名内部类通常为了实现某个接口或抽象类(实现接口只能实现一个)
5.匿名内部类还可以有继承式用法(和外部类同名,表示继承这个外部类,可以覆写方法,但新增方法通常意义不大)
示例代码:(我觉得已经够乱的了,当然你还可以写的更乱)public class Out1 {
private String x;
public int a=3;
public Out1(String x){
this.x=x;
System.out.println(this.a);
}
@Override
public String toString(){
return "x="+x;
}
public void pp(){
System.out.println("pp");
}
class InnerFn{
public Out2 rOut2(){
return new Out2(11){
public String outkkk(){
return "kkk";
}
public void prf(){
System.out.println(outkkk());
}
};
//此处{}段,定义了一个内部类。匿名内部类可以实现一个接口或继承一个类(不能有构造函数),
//自己加的方法只能用于内部类局部
}
public Out1 rOut1(){
return new Out1("mmm"){
public int bb=5;
public void ff(){
System.out.println("ff");
}
//无法定义构造方法,只能加返回值变成普通方法
public void Out1(int a){
bb=a;
}
@Override
public void pp(){
ff();
//Out1(8);
System.out.println("匿名内部类覆盖外部类方法");
System.out.println(bb);
}
};
//继承式匿名内部类
}
}
public static void main(String[] args){
Out1 ou1=new Out1("abc");
ou1.pp();
InnerFn t2=ou1.new InnerFn();
System.out.println(ou1);
System.out.println(t2.rOut2());
System.out.println(t2.rOut1());
t2.rOut2().prf();
t2.rOut1().pp();
//t2.rOut1().ff(); //编译通不过,匿名内部类的方法不能被外部识别
}
}
public abstract class Out2 {
private int a;
Out2(int a ) {
this.a=a;
}
abstract void prf();
}
-------------------------------------------------------------------------------------
又看了几篇文章及其评论,觉得有些概念还是深究一下:
1.所匿的是类的名字而非实例的名字——也就是说,原本这里应该写出 Classxx extends Out1或 Classxx implements Iout1 的,然后再 new Classxx()
2.既然这个Classxx没写,那么我们new的时候就用了其超类的类型,也就是写出了new Out1(){}
3.此时定义了类的同时也产生了实例。这个实例可以赋给一个Out1类型的变量。当然我上面的例子是直接return 了一个对象,而且在外面我也没有给它分配名字,就直接调用其方法了:t2.rOut1().pp();
4.我们甚至可以定义完就直接调用某个方法来完成某个任务,而在外面根本就没有任何使用它的痕迹:比如在某个方法中 new Out1(){ public ... }.xx 。同前所述,这个xx必须是超类中定义了的方法。其实这种用法才是匿名内部类的意义。单次使用,用完就“扔”了。
5.有的文章里说可以实现多个接口,我觉得不对。因为匿名类采用的是隐含的继承(与超类同名),那么名称只有一个,也就是只能实现一个接口。——当然,如果其超类实现了多个接口,这个就不算在这了。
java匿名内部类返回值_java匿名内部类相关推荐
- java 接口 返回值_java api返回值的标准化详解
api返回值的标准化 例如 {"status":200,"message":"操作成功","data":"{\ ...
- java 内部类 返回值_Java基础第10天+形式参数和返回值的问题、包、导包、权限修饰符、常见的修饰符、内部类(局部内部类,成员内部类,匿名内部类)...
1:形式参数和返回值的问题(理解) (1)形式参数: 类名:需要该类的对象 抽象类名:需要该类的子类对象 接口名:需要该接口的实现类对象 (2)返回值类型: 类名:返回的是该类的对象 抽象类名:返回的 ...
- java 内部类 返回值_Java学习笔记:形参和返回值、内部类、常用API
形参和返回值 类名作形参 public void useCat(Cat c){ c.eat(); } CatOperator co=new CatOperator(); Cat c=new Cat() ...
- java exe 返回值_java调用exe返回值
{// getAccount 方法,使用 get 方法; return accounts.get(index); } } Bank .java: package com.mybank.domain; ...
- java try 返回值_JAVA的try... catch finally的return返回值问题
下面看一个例子(例1),来讲解Java里面中try.catch.finally的处理流程 public class TryCatchFinally { @SuppressWarnings(" ...
- java hashcode返回值_Java String hashCode() 使用方法及示例
Java String hashCode() 使用方法及示例 Java String hashCode()方法返回字符串的哈希码. 字符串hashCode()方法的语法为: string.hashCo ...
- oracle java存储过程返回值_java程序调用Oracle 存储过程 获取返回值(无返回,非结果集,结果集)...
java程序调用Oracle 存储过程 获取返回值(无返回,非结 果集,结果集) oracle中procedure是不能有返回值的,要想返回值,就得有 输出参数,同样要想返回记录集,可以把游标类型作为 ...
- java run() 返回值_java线程的run()没有返回值怎么办?
用线程Thread执行一些方法后,需要判断执行是否成功. public void run() {} run( ) 方法返回值是空, 怎么办? 解决方法: Note 使用 call() 方法 Calla ...
- java递归函数返回值_Java基础——方法返回值递归
原标题:Java基础--方法返回值&递归 声明:本栏目所使用的素材都是凯哥学堂VIP学员所写,学员有权匿名,对文章有最终解释权:凯哥学堂旨在促进VIP学员互相学习的基础上公开笔记. 例题:写一 ...
最新文章
- Mini汽车的保养周期
- LVS+Keepalived 高可用群集的介绍和搭建步骤
- 后端学习 - 并发编程
- CSDN 独家对话阿里云贾扬清、华先胜等大咖,剧透阿里云原生技术密码
- rust新版组队指令_Rust最新控制台命令2017
- 迷宫(信息学奥赛一本通-T1215)
- 深度学习————如何在Python中求解函数的解析表达式
- html可以用坐标画svg图吗,html5教程-SVG基础 SVG坐标系统和图形转换
- SCRT804安装教程
- 计算机二级ms office有题库吗,计算机二级office题库-吃惊!二级MS Office高级应用通过率仅有21.07%!...
- 即席查询—— Kylin使用
- cwrsync向linux免密同步,Cwrsync如何使用可以实现Linux与windows下的文件同步详解
- Android:软键盘弹出配合界面效果脱坑
- 千锋python培训班怎么样
- PV,UV,VV,IP
- markdown贴gif图片
- 09-单片机模块化程序: μCOS-II中内存管理程序使用说明
- python爬取2345天气网上2011年-2018年历史天气
- android vulkan 游戏,王者荣耀Vulkan
- mysql无法启动(centos7):systemctl status mysqld.service:Can‘t create/write to file