内部类和接口的问题

问题描述

原题,和答案如下代码所式问题是: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(){}}

时间: 2024-11-26 10:16:43

内部类和接口的问题的相关文章

使用技巧:内部类和匿名类优化Java代码

技巧|优化 Java 1.1通过对Java语言规范进行修改,显著简化了一些实用结构的实现.在那些修改中,最引人注目的就是内部类和匿名类.如运用得当,它们可使程序更易理解和维护.下面来看看这些特性具体是如何工作的,如何正确使用它们,以及如何避免一些常见的错误. 内部类 简单地说,"内部类"是在另一个类的内部声明的类.从Java 1.1开始,你可在一个类中声明另一个类,这与声明字段和方法非常相似.包装了内部类声明的类就称为"外部类". 实际上,Java语言规范还允许你做

Java 中的内部类和匿名类

Java 内部类有什么好处?为什么需要内部类? 首先举一个简单的例子,如果你想实现一个接口,但是这个接口中的一个方法和你构想的这个类中的一个方法的名称,参数相同,你应该怎么办?这时候,你可以建一个内部类实现这个接口.由于内部类对外部类的所有内容都是可访问的,所以这样做可以完成所有你直接实现这个接口的功能. 不过你可能要质疑,更改一下方法的不就行了吗? 的确,以此作为设计内部类的理由,实在没有说服力. 真正的原因是这样的,java 中的内部类和接口加在一起,可以的解决常被 C++ 程序员抱怨 ja

Java核心类库:内部类那点事儿

内部类:定义在类的内部的类 为什么需要内部类? ● 典型的情况是,内部类继承自某个类或实现某个接口,内部类的代码操作创建其的外围类的对象.所以你可以认为内部类提供了某种进入其外围类的窗口. ● java中的内部类和接口加在一起,可以实现多继承. ● 可以使某些编码根简洁. ● 隐藏你不想让别人知道的操作. 使用内部类最吸引人的原因是: 每个内部类都能独立地继承自一个(接口的)实现,所以无论外围类是否已经继承了某个(接口的)实现,对于内部类都没有影响.如果没有内部类提供的可以继 承多个具体的或抽象

基于java内部类作用的深入分析_java

提起Java内部类(Inner Class)可能很多人不太熟悉,实际上类似的概念在C++里也有,那就是嵌套类(Nested Class),关于这两者的区别与联系,在下文中会有对比.内部类从表面上看,就是在类中又定义了一个类(下文会看到,内部类可以在很多地方定义),而实际上并没有那么简单,乍看上去内部类似乎有些多余,它的用处对于初学者来说可能并不是那么显著,但是随着对它的深入了解,你会发现Java的设计者在内部类身上的确是用心良苦.学会使用内部类,是掌握Java高级编程的一部分,它可以让你更优雅地

全面了解Java中的内部类和匿名类_java

Java内部类(Inner Class),类似的概念在C++里也有,那就是嵌套类(Nested Class),乍看上去内部类似乎有些多余,它的用处对于初学者来说可能并不是那么显著,但是随着对它的深入了解,你会发现Java的设计者在内部类身上的确是用心良苦.学会使用内部类,是掌握Java高级编程的一部分,它可以让你更优雅地设计你的程序结构.下面从以下几个方面来介绍: 第一次见面 public interface Contents { int value(); } public interface

Qt之zip压缩/解压缩(QuaZIP)

简述 QuaZIP是使用Qt/C++对ZLIB进行简单封装的用于压缩及解压缩ZIP的开源库.适用于多种平台,利用它可以很方便的将单个或多个文件打包为zip文件,且打包后的zip文件可以通过其它工具打开. Qt中提供了qCompress/qUncompress来进行文件的压缩与解压,但存在两个问题: 无法很好地压缩/解压缩文件夹. 只能将一个文件压缩为某种格式,压缩后的文件无法通过其它解压工具打开(如:7zip,或WinRAR),只能通过qUncompress解压读取,也就是说qCompress生

仔细触摸Java编程中的“文档”和“包”

编程 什么是包 Java中的包(Package)其实指的就是目录,它是为了更好地管理Java类(Class)和接口(Interface).Java语言的包可以被另一个Java开发包所使用.如果我们要引用某个包中的类,用import关键字来标明即可.比如: import java.util. date=new Date  提示:import java.util.表示java.util中的所有公有类和接口被引入到当前包.这里的匹配符可以调入多个类名. 常用的Java标准包 JDK为我

使用内部和匿名类优化Java代码

优化 Java 1.1通过对Java语言规范进行修改,显著简化了一些实用结构的实现.在那些修改中,最引人注目的就是内部类和匿名类.如运用得当,它们可使程序更易理解和维护.下面来看看这些特性具体是如何工作的,如何正确使用它们,以及如何避免一些常见的错误.    内部类    简单地说,"内部类"是在另一个类的内部声明的类.从Java 1.1开始,你可在一个类中声明另一个类,这与声明字段和方法非常相似.包装了内部类声明的类就称为"外部类".    实际上,Java语言规

JBuilder2005实现重构之重构前的侦察

有句英语谚语叫作"Look before you jump",在着手重构前,看看这个更改的影响度,以资决策,是一个不错的主意. 1.查看定义 程序类之间是相互调用的,JBuilder可以方便你查看类.方法.值域的定义,将光标置于某一代码元素上,按Ctrl+Enter快捷键或点击右键,在弹出的菜单中选择Find Definition,JBuilder将定位到该元素的定位处. 2.查看引用 类.方法.值域被定义后,其引用星洒在程序的不同地方,查看定义就象"游子寻根",而