/*
我这是一个将匿名内部类和接口连接在一起的一个小程序,在主函数内部定义了一个匿名内部类,返回一个继承了一个接口的对象,
子类复写了接口中的方法,最终我要运行method。可是怎么调整都会出错,看着有点乱,请帮助我修改一下,并说明一下,谢谢!!
!!!!
*/
interface Iner
{
void method
}
class Inner implements Iner
{
public void method()
{
System.out.println("method run");
}
}
class InnerClassTest
{
public static void main(String[] args)
{
new Test()
{
public Iner function()
{
return new Inner();
}
}.method();
}
}
作者: 黄泉 时间: 2014-4-3 12:01
interface Iner
{
void method//method的括号和结束符号呢?
}
class Inner implements Iner
{
public void method()
{
System.out.println("method run");
}
}
class InnerClassTest
{
public static void main(String[] args)
{
//你这个类我实在是找不出它是谁的接口或者子类
new Test()//想要定义匿名内部类:需要前提,内部类必须继承一个类或者实现接口
{
public Iner function()
{
return new Inner();//返回的什么啊?还不如给Inner中的method加一个 static 直接调用
}
}.method();
}
}
优化后的代码:
interface Iner
{
void method();
}
/*
class Inner implements Iner 这就不要了
{
public void method()
{
System.out.println("method run");
}
}
*/
class Demo1
{
public static void main(String[] args)
{
new Inner()
{
public void method()
{
System.out.println("method run");
}
}.method();
}
}作者: 梦幻 时间: 2014-4-3 12:02
/*
第一、首先你应该先明确匿名内部类和内部类的区别:
匿名内部类格式:new 父类或者接口(){定义子类的内容}
匿名内部了顾名思义就是我们在写的时候不用再定义一个类
因此也就没有新的类名。
第二、接口中的方法都是抽象类型的,抽象类型不用写{},但是一定要有();
这个是不能少的,不是说全部都要省略。
第三、你的匿名内部类虽然说已经定义了,但是运行时并没有调用function函数
也就没有创建Inner对象,当然method方法也就不能运行了
下面是我给你修改的,希望对你起到帮助!!
*/
interface Iner
{
void method(); //抽象方法不用写{},但是()和;不能省
}
class Inner implements Iner
{
public void method()
{
System.out.println("method run");
}
}
class InnerClassTest
{
public static void main(String[] args)
{
new InnerClassTest() //注意:内部类不需要定义新的类名,只需父类即可
{
public Iner function()
{
return new Inner();
}
}.function().method();
/*匿名内部类建立后要先运行其中的function方法后,才能建立Inner对象
也才能运行method方法。
*/
}
}