我是Java的新手,我有一个非常基本的问题。
我在同一个包下有2个父类。 Animal
抽象类和Machine
类。
现在,Animal
Abstract Class有一个受保护的方法。我知道如果类在同一个包下,可以访问受保护的方法。
我可以在我的Machine
类中访问该受保护的方法,问题是..是否可以覆盖该受保护的方法?不延长Animal
类。
答案 0 :(得分:27)
答案 1 :(得分:7)
您只能通过扩展程序覆盖方法。
如果您愿意,可以使用匿名子类覆盖受保护的方法。 E.g。
public class Animal {
protected String getSound() {
return "(Silence)";
}
public void speak() {
System.out.println(getSound());
}
}
在另一堂课:
public static void main(String ... args) {
Animal dog = new Animal() {
@Override
protected String getSound() {
return "Woof!";
}
}
dog.speak();
}
将输出:
Woof!
答案 2 :(得分:1)
否,覆盖意味着继承父类的行为,如果不扩展类,则无法实现。
public class PClass
{
protected boolean methodA()
{
return true;
}
}
public class CClass extends PClass
{
protected boolean methodA()
{
return false;
}
}
运行以下代码进行测试
public static void main(String[] args)
{
PClass pc=new CClass();
System.out.println(pc.methodA());
}
O/p=false
这里我们重写了methodA
答案 3 :(得分:0)
为了覆盖方法,您必须扩展该类。这就是最重要的意思:拥有一个与超类相同签名的方法。
答案 4 :(得分:0)
按定义覆盖说..
具有相同签名(名称,加上其参数的数量和类型)的子类中的实例方法和作为超类中的实例方法的返回类型会覆盖超类的方法。
所以AFAIK如果不扩展超类,就无法覆盖该方法。
答案 5 :(得分:0)
受保护的只能由其他包中的子类访问。同一个包中的类也可以访问受保护的字段,方法和构造函数,即使它们不是受保护成员的类的子类。
覆盖: 具有相同签名的子类中的实例方法。
回答你的问题:
但是,如果您不希望在extends
Animal class
Machine class
,那么它不会覆盖您自己班级的正常功能。