A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 嘎路的米 中级黑马   /  2015-4-30 00:17  /  698 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

interface Inter{
        void method();
}
class Text{
        public static Inter function(){
                Inter i = new Inter(){
                        public void method() {
                                System.out.println("1223");
                        }
                };
                return i;
        }
}
public class Demo {
        public static void main(String[] args) {
                        Text.function().method();
        }
}
在这个程序中,function()方法定义为static,那在function()方法中为什么可以运行
Inter i = new Inter(){
                public void method() {
                        System.out.println("1223");
                }
};
静态方法不是只能存放静态的东西吗,但是这个匿名对象不是静态的啊

6 个回复

倒序浏览
你看代码里面存放的是匿名内部类呀
回复 使用道具 举报
崔小可 发表于 2015-4-30 00:29
你看代码里面存放的是匿名内部类呀

存在匿名内部类就可以存在静态方法中吗?为什么啊?
回复 使用道具 举报
Text.function() 这句得到一个 实现了Inter 接口的实例,
然后
Text.function().method() 调用这个实例的方法。
因为这个实例的类并没有显示出来,所以叫做匿名内部类
回复 使用道具 举报
首先,静态方法只能存放静态的东西,这句话是有问题的。方法不是存放东西的,方法是通过对参数进行一些列操作而得到想要的结果的一种功能,方法内部可以看作是一种过程。静态方法里面是只能调用静态的属性和方法。
我对于这个的理解就是 由于外面的方法定义为静态的,在静态方法里面定义的内部类完全可以看作 定义的是一个属性变量,通过内部类后面加了分号“;”,就使这种假设更合理化。
静态方法里面定义的属性默认就是静态的,只不过作用域只在方法内。
回复 使用道具 举报
Dylon 发表于 2015-4-30 01:02
首先,静态方法只能存放静态的东西,这句话是有问题的。方法不是存放东西的,方法是通过对参数进行一些列操 ...

受教了,是我对静态方法的理解错误了。谢谢
回复 使用道具 举报
都写  Inter i 这 个玩样儿了还能叫匿名?NICE
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马