我是Java的新手,有一个非常基础的问题。
我在同一个包下有2个父类。抽象类Animal
和类Machine
。
现在,Animal
抽象类有一个受保护的方法。我知道如果这些类在同一个包中,可以访问受保护的方法。
我可以在Machine
类中访问该受保护的方法,那么问题来了...有没有可能覆盖这个受保护的方法? 而不用继承Animal
类。
我是Java的新手,有一个非常基础的问题。
我在同一个包下有2个父类。抽象类Animal
和类Machine
。
现在,Animal
抽象类有一个受保护的方法。我知道如果这些类在同一个包中,可以访问受保护的方法。
我可以在Machine
类中访问该受保护的方法,那么问题来了...有没有可能覆盖这个受保护的方法? 而不用继承Animal
类。
您只能通过扩展来重写方法。
如果您愿意,可以使用匿名子类重写受保护的方法。例如:
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!
不可以,覆盖意味着从父类继承行为,而不扩展类是不可能的。
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
的行为。覆盖的定义是..
子类中具有与超类中一个实例方法相同签名(名称,加上其参数的数量和类型)和返回类型的实例方法将覆盖超类的方法。
所以据我所知,如果您不扩展超类,就无法重写该方法。