博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
匿名内部类
阅读量:6684 次
发布时间:2019-06-25

本文共 2334 字,大约阅读时间需要 7 分钟。

1.把下列程序改成匿名内部类

public class Test {    public static void main(String[] args) {        Outer  o = new Outer();        o.getInnerFuntion();    }}class Outer {     int x = 0 ;    private class Inner{                    void function(){            System.out.println("x="+x);        }    }     public void getInnerFuntion(){        new Inner().function();;    }}

2.思考方式如下

a匿名内部类就是没有名字的内部类
b那么如何new对象inner呢?
那么此内部类需要继承父类或者实现接口

public class Test {    public static void main(String[] args) {    Outer  o = new Outer();        o.getInnerFuntion();    }}//内部类要实现的接口interface Demo{    void function();}class Outer {     int x = 0 ;    private class Inner{                        void function(){                System.out.println("x="+x);            }    }     public void getInnerFuntion(){        new Inner().function();;    }}

上述程序把内部类中的funciton()方法提取成了一个接口

public class Test {    public static void main(String[] args) {        Outer  o = new Outer();        o.getInnerFuntion();    }}interface Demo{    void function();}class Outer {     int x = 0 ;    public void getInnerFuntion(){        new Demo() {            @Override            public void function() {                System.out.println("x="+x);            }        }.function();//调用内部类中的方法    }}

上述程序已经是个局部内部类了,我们发现局部内部类有个缺点,那就是只能调用一个方法,如果想调用多个方法,那么就需要多次的尽兴new对象,所以我们思考能不能给匿名内部类取名字呐?能

但是要注意用名字访问只能访问访问内部已有的方法,因为多态

匿名内部类中的方法最多不要超过3个(不包含3个),因为阅读性差

没有父类没有接口,能写匿名内部类吗?能 new Object()

public class Test {    public static void main(String[] args) {        Outer  o = new Outer();        o.getInnerFuntion();    }}class Outer {     int x = 0 ;    public void getInnerFuntion(){        Object demo = new Object() {            public void function() {                System.out.println("x="+x);            }            @Override            public String toString() {                return super.toString();            }        };        //The method function() is undefined for the type Object        demo.function();        demo.toString();    }}

练习题

public class Demo {    public static void main(String[] args) {        Test.function().method();    }}interface Inter{    void method();}class Test {    //用内部类在此处填写代码}

/答案:

static Inter function(){
Inter in = new Inter(){
public void method(){
System.out.println("method");
}
};
return in;
}
/

转载于:https://blog.51cto.com/13579086/2066271

你可能感兴趣的文章
平衡二叉树中第k小的数 Kth Smallest Element in a BST
查看>>
我的友情链接
查看>>
Vyos防火墙功能配置
查看>>
Redhat内核编译
查看>>
Hyper-V 2016 系列教程4 Hyper-V 虚拟机的新建
查看>>
Flask开发
查看>>
trickle 限制用户空间带宽
查看>>
SQL事务
查看>>
GRE配置案例实现远程网络通信
查看>>
不用linux作为桌面的N个理由
查看>>
Rabbitmq学习之路3-cluster
查看>>
iptables实现NAT(网络搜索整理)
查看>>
关于ip地址
查看>>
ASP.NET自定义404和500错误页面
查看>>
OpenGL学习(七)纹理映射
查看>>
一些必不可少的Sublime Text 2插件
查看>>
<進階&高級>ADT線上視頻&PPT課件
查看>>
iOS md5加密
查看>>
测试项目
查看>>
第一章ASP.NET SignalR简介
查看>>