包访问级别 class
Package access level to class
class 在没有访问说明符的情况下的访问范围是什么?
例如:
package com.foo.bar;
class MyFoo{
// All Class definition
}
我知道这样的class被称为package class
,与public class
相反。所以我的问题是我们可以从哪里访问和使用这样的 class(因为它们似乎无法从任何地方访问)。我可以从同一个包的另一个 public class 访问它吗?
例如:
package com.foo.bar;
public class MyBar{
MyFoo foo; // Compiler throwing and error at this line
// Rest of definition
}
我问过 google 但没有得到回复。
这意味着 class 可用于 相同包 的元素。
您绝对可以通过 import 语句访问它,因为您无法从任何地方直接访问它( 意味着无需导入 ),就像您可以使用 public class
。您必须添加 import
语句。
import pack1.pack2.MyClass;
你的第一个 class 是 package-private 这意味着它对同一包中的其他 class 是可见的,所以你的例子应该编译。这里是 the canonical tutorial link on Java access rules.
当class在同一个包中时,import ...
应该不是 import ...
!
错误是什么?
干杯,
来自 Java™ 教程 Controlling Access to Members of a Class
… If a class has no modifier
(the default, also known as package-private), it is visible only
within its own package (packages are named groups of related classes —
you will learn about them in a later lesson.)
限制(如果不能避免的话)客户端 类 使用具体 类 并依赖于接口通常是至关重要的。
事实上,这种对具体 类 的依赖使得客户端代码在引入新的同类新具体 类(实现相同的接口)时变得脆弱。
客户端类将只声明变量或集合或接口类型的方法,因此依赖于多态方法。
那么具体 类 可以是 package-private(但请参阅下面关于实例化的要点),因为客户端 类 只需要通常是public。
声明一组 package-private 具体 类 的优点是它有助于防止向它们引入粗心的依赖关系。
然而,一个问题是关于创建具体 类 的实例,因为 new 运算符不是多态的。
因此需要依赖复杂的方法(依赖注入、原型或某些工厂等创建模式,涉及的工具如 Spring 或 Guice ...)。即便如此,包级别的可见性可能过于严格,无法方便地应用这些实例化方法。
class 在没有访问说明符的情况下的访问范围是什么? 例如:
package com.foo.bar;
class MyFoo{
// All Class definition
}
我知道这样的class被称为package class
,与public class
相反。所以我的问题是我们可以从哪里访问和使用这样的 class(因为它们似乎无法从任何地方访问)。我可以从同一个包的另一个 public class 访问它吗?
例如:
package com.foo.bar;
public class MyBar{
MyFoo foo; // Compiler throwing and error at this line
// Rest of definition
}
我问过 google 但没有得到回复。
这意味着 class 可用于 相同包 的元素。
您绝对可以通过 import 语句访问它,因为您无法从任何地方直接访问它( 意味着无需导入 ),就像您可以使用 public class
。您必须添加 import
语句。
import pack1.pack2.MyClass;
你的第一个 class 是 package-private 这意味着它对同一包中的其他 class 是可见的,所以你的例子应该编译。这里是 the canonical tutorial link on Java access rules.
当class在同一个包中时,import ...
应该不是 import ...
!
错误是什么?
干杯,
来自 Java™ 教程 Controlling Access to Members of a Class
… If a class has no modifier (the default, also known as package-private), it is visible only within its own package (packages are named groups of related classes — you will learn about them in a later lesson.)
限制(如果不能避免的话)客户端 类 使用具体 类 并依赖于接口通常是至关重要的。 事实上,这种对具体 类 的依赖使得客户端代码在引入新的同类新具体 类(实现相同的接口)时变得脆弱。
客户端类将只声明变量或集合或接口类型的方法,因此依赖于多态方法。 那么具体 类 可以是 package-private(但请参阅下面关于实例化的要点),因为客户端 类 只需要通常是public。 声明一组 package-private 具体 类 的优点是它有助于防止向它们引入粗心的依赖关系。
然而,一个问题是关于创建具体 类 的实例,因为 new 运算符不是多态的。 因此需要依赖复杂的方法(依赖注入、原型或某些工厂等创建模式,涉及的工具如 Spring 或 Guice ...)。即便如此,包级别的可见性可能过于严格,无法方便地应用这些实例化方法。