如何在子类中访问超类的受保护方法?
How to access a protected method of superclass in a subclass?
我在两个不同的包中有父子 classes。我正在重写受保护类型的方法。我想访问 subclass.
中受 super class 保护的方法
考虑以下代码:
package package1;
public class Super
{
protected void demoMethod()
{
System.out.println("In super method");
}
}
package package2;
import package1.Super;
public class Sub extends Super
{
@Override
protected void demoMethod()
{
System.out.println("In sub method");
}
public static void main(String[] args)
{
//code for accessing superclass demoMethod to print "In super method"
}
}
在 sub class 的主要方法中,我想访问打印 "In super method" 的 super class demoMethod
。我知道使用超级 class 对象引用调用 demoMethod
.
从子 class 中看不到 demoMethod
可以吗?如果是,如何?
认为我是 Java 的新手,并提供替换主要方法中注释的答案。
在 child class 中使用 super.demoMethod()
或将其从 child class
中完全删除
您的 main() 方法无法访问 demoMethod()
的 superclass 实现——因为它在子 class.
中被覆盖了
您的 main() 方法可以通过子class 类型的引用 访问 demoMethod()
,即使它是受保护的,因为它在与您的子 class 相同的包裹。但它会调用 subclass 实现。
但如果您是 "using superclass object reference to call demoMethod",则该方法将无法访问,并且您的代码将无法编译。您的 superclass 在不同的包中。标记为 protected
的方法只能由子classes 和同一包中的代码访问。
如果您在 subclass 和 superclass 中都创建了方法 public
,调用 demoMethod()
将调用 subclass 实现,无论是否引用是 super 或 subclass 类型。
subclass 的实例可以调用 super.demoMethod()
作为其方法实现的一部分。但是main()方法不行。
我在两个不同的包中有父子 classes。我正在重写受保护类型的方法。我想访问 subclass.
中受 super class 保护的方法考虑以下代码:
package package1;
public class Super
{
protected void demoMethod()
{
System.out.println("In super method");
}
}
package package2;
import package1.Super;
public class Sub extends Super
{
@Override
protected void demoMethod()
{
System.out.println("In sub method");
}
public static void main(String[] args)
{
//code for accessing superclass demoMethod to print "In super method"
}
}
在 sub class 的主要方法中,我想访问打印 "In super method" 的 super class demoMethod
。我知道使用超级 class 对象引用调用 demoMethod
.
demoMethod
可以吗?如果是,如何?
认为我是 Java 的新手,并提供替换主要方法中注释的答案。
在 child class 中使用 super.demoMethod()
或将其从 child class
您的 main() 方法无法访问 demoMethod()
的 superclass 实现——因为它在子 class.
您的 main() 方法可以通过子class 类型的引用 访问 demoMethod()
,即使它是受保护的,因为它在与您的子 class 相同的包裹。但它会调用 subclass 实现。
但如果您是 "using superclass object reference to call demoMethod",则该方法将无法访问,并且您的代码将无法编译。您的 superclass 在不同的包中。标记为 protected
的方法只能由子classes 和同一包中的代码访问。
如果您在 subclass 和 superclass 中都创建了方法 public
,调用 demoMethod()
将调用 subclass 实现,无论是否引用是 super 或 subclass 类型。
subclass 的实例可以调用 super.demoMethod()
作为其方法实现的一部分。但是main()方法不行。