我是 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
protected 只能由其他包中的子类访问。同一个包中的类也可以访问受保护的字段、方法和构造函数,即使它们不是受保护成员类的子类。
Override : 子类中具有相同签名的实例方法。
你的问题的答案:
但如果你不想extends
Animal class
在你的Machine class
那么它不会覆盖它只是你自己班级的正常功能。
根据定义覆盖说..
子类中具有相同签名(名称,加上其参数的编号和类型)和返回类型作为超类中的实例方法的实例方法会覆盖超类的方法。
因此,如果您不扩展超类,则 AFAIK 就无法覆盖该方法。
为了覆盖一个方法,您必须扩展该类。这就是覆盖的意思:拥有一个与超类具有相同签名的方法。