具有default
的类的字段或方法是否存在于子类中,当它们存在于同一个包中时,或者它们是否仍应声明为protected
?
示例:
package mypackage;
class A{
int x = 3;
}
class B extends A{
}
B
类是否也是字段x
?
答案 0 :(得分:3)
见说明:
希望它能解决问题
<强> [编辑] 强>
从表格中为默认修饰符,例如:
只能从声明的包裹中访问它们。
表示如果班级A
和B
保留在同一个套餐中,您可以打印出x
:
class B extends A{
public static void main(String[] args) {
new B().init();
}
private void init() {
System.out.println(x);
}
}
但是,如果我们将类B
放到不同的包中,则会引发错误:The type mypackage.A is not visible
。所以在这里你必须设置public
修饰符。
答案 1 :(得分:1)
使用default
访问权限时,属性仅对同一包中的类可见。
但是通过protected
访问,相同包和子类中的所有类都可以访问它们(无论包是什么)。选择与您相关的内容。
B类是否还有一个字段x?
是B
继承了x
A
答案 2 :(得分:0)
是的,您可以使用继承访问public
,default
(如果类在同一个包中)和protected
数据成员:
public class A {
int a;
}
public class B extends A {
B() {
a = 5;
}
答案 3 :(得分:0)
对于默认子类[如果在同一个包中]有权使用方法/数据成员。
class B extends Class A{
System.out.println(new B().x); //will surely work in your case(Example shown).
}
答案 4 :(得分:0)
具有默认访问权限的类成员可用于同一包中的所有类。如果类使用默认可见性的let say字段扩展一个,那么如果它在同一个包中,它将有权访问其继承的字段
package original;
public class A{
int x = 1;
}
package original;
public class B extends A{
void test(){
x = 2;// works because B inherited `x` and it is visible here
}
}
但是如果扩展类是在不同的包中创建的,那么原始的,具有默认访问权限的成员将无法访问。
package other;
class Outsider extends original.A{
void test(){
x = 2;// compilation error, x is not visible here
}
}
如果你想让这个局外人类编译,你需要制作x
protected
所以它可以被这个类继承。