Mas*_*ram 3 java oop methods inheritance
我正在实现一个系统,我有一个名为'MyMethod'的接口(名称是任意的),许多小类正在实现这个方法(特别是覆盖它的'call'方法),我正在使用多态来创建将这些实例放入列表中.
问题是,由于我有许多实现该方法的小类,因此将这些类放在同一个java文件(MyMethod.java)中更容易,如下所示:
public interface MyMethod {
public String call(foo param1, bar param2) throws SQLException, IOException;
}
class FooMethod1 implements MyMethod {
@Override
public String call(foo param1, bar param2) throws SQLException, IOException {
//Do Something
}
}
class FooMethod2 implements MyMethod {
@Override
public String call(foo param1, bar param2) throws SQLException, IOException {
//Do Something Different
}
}
Run Code Online (Sandbox Code Playgroud)
但是,将这些类放在同一个文件中,尽管更整洁,但我似乎反对在Java中应该完成的事情.
将这些类放在同一个文件中是否可以?或者我应该将它们分别移动到单独的文件中?
谢谢
是的,可以将几个包私有类放在同一个文件中.
JLS的相关部分是§7.3
CompilationUnit:
PackageDeclaration[opt] ImportDeclarations[opt] TypeDeclarations[opt]
TypeDeclarations:
TypeDeclaration
TypeDeclarations TypeDeclaration
Run Code Online (Sandbox Code Playgroud)
如您所见,编译单元可能有多个类型声明(或零).JLS的另一个相关部分是§7.6.它解释了从编译单元外部访问的那些类型声明与编译单元的文件名之间的相互关系:
当且仅当包存储在文件系统(第7.2节)中时,如果在由类型名称组成的名称下的文件中找不到类型,则主机系统可以选择强制执行编译时错误的限制.如果满足以下任一条件,则加上一个扩展名(例如.java或.jav):
该类型由声明类型的包的其他编译单元中的代码引用.
该类型被声明为public(因此可以从其他包中的代码访问).
这种限制意味着每个编译单元最多只能有一个这样的类型.这种限制使Java编译器可以轻松地在包中找到命名类.实际上,许多程序员选择将每个类或接口类型放在它自己的编译单元中,无论它是公共的还是由其他编译单元中的代码引用.
显然,您的方法不是针对Java,而是完全正常.但是,请注意您的MyMethod
实现可能在MyMethod.java
编译单元外部不可用,具体取决于编译器实现.虽然,javac和Eclipse编译器似乎都没有这个问题......