问题描述
原题,和答案如下代码所式问题是:1、为什么可以newTest()接口不是不能创建对象吗2、可看出必然需要实现,那么为什么Demo类后没有implements呢3、在本类中创建本类对象说是不能直接访问非静态方法,而已学过的印象中只有单例是在本类创建本类对象的,那为什么不用那种设计模式呢4、发现我改回非内部类总有问题!谢谢interfaceTest{voidfunc();}classDemo{publicsaticvoidmain(String[]args){//补足代码;(匿名内部类)}voidshow(Testt){t.func();}}--------------------------------------------------------------------------------------------------interfaceTest{voidfunc();}classDemo{publicsaticvoidmain(String[]args){newDemo().show(newTest(){publicvoidfunc(){}});}voidshow(Testt){t.func();}}
解决方案
解决方案二:
匿名内部类相当于创建了一个接口的实现类,如果是接口就是实现类,如果是类,匿名内部类就是子类,接口是不能被实例化。单例是种设计模式,是为了让这个类只能被实例化一次,比如数据库的连接,新人同学习,mark
解决方案三:
引用1楼leafact的回复:
匿名内部类相当于创建了一个接口的实现类,如果是接口就是实现类,如果是类,匿名内部类就是子类,接口是不能被实例化。单例是种设计模式,是为了让这个类只能被实例化一次,比如数据库的连接,新人同学习,mark
那如果不用内部类该怎么写
解决方案四:
问题1.newTest(){.......},把new关键字后面的代码看成是Test接口的一个实现类就好理解了,new的是Test接口实现类的一个对象。刚学习接口的话,是有点难理解,用过了也就习惯了,到时候就不会纠结这个了的。问题2.没有看太明白问题。newTest(){.......},这个肯定是要在{}里面实现的,这是匿名类,你可以去看一下编译的class文件,这个匿名类会有一个单独的class文件,文件名大概是Test$什么什么.class。上面的代码中,Demo是不需要实现接口Test的,这里Demo根本就不是Test的实现类。问题3.是可以调用的,但是为什么不用单例,那就是设计上的事情了。问题4.也没看太明白,要不你把那代码也贴出来看看
解决方案五:
在下面这个类implements接口,上面调用直接new类名,应该可以,但是只能有一个public的类
解决方案六:
引用2楼yeyu333的回复:
Quote: 引用1楼leafact的回复:
匿名内部类相当于创建了一个接口的实现类,如果是接口就是实现类,如果是类,匿名内部类就是子类,接口是不能被实例化。单例是种设计模式,是为了让这个类只能被实例化一次,比如数据库的连接,新人同学习,mark那如果不用内部类该怎么写
classDemo{publicsaticvoidmain(String[]args){TestImplt=newTestImpl();newDemo().show(t);}voidshow(Testt){t.func();}}publicclassTestImplimplementsTest{publicvoidfunc(){}}