我是Java新手,我有一个非常基本的问题。重写受保护的方法
我有2个父类下相同的包。 Animal
抽象类和Machine
类。
现在,Animal
抽象类具有受保护的方法。我知道,如果这些类在同一个包中,那么受保护的方法是可访问的。
我可以访问我的Machine
类中受保护的方法,问题是..是否可以重写该受保护的方法?不扩展Animal
类。
我是Java新手,我有一个非常基本的问题。重写受保护的方法
我有2个父类下相同的包。 Animal
抽象类和Machine
类。
现在,Animal
抽象类具有受保护的方法。我知道,如果这些类在同一个包中,那么受保护的方法是可访问的。
我可以访问我的Machine
类中受保护的方法,问题是..是否可以重写该受保护的方法?不扩展Animal
类。
谢谢你回答这个基本问题。 :) – 2012-07-24 07:30:29
这一个是正确的答案。丹尼斯萨利比奥,你应该玩一下阶级层次结构。 – TecHunter 2012-07-24 07:30:48
您只能通过扩展来覆盖方法。
如果您愿意,您可以使用匿名子类覆盖受保护的方法。例如。
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!
Animal animal = new Dog(); 我用这个代码来访问该方法,我只是想知道如果我可以覆盖受保护的方法。 – 2012-07-24 07:28:02
谢谢你回答这个基本问题。 :) – 2012-07-24 07:32:17
我已经更新了我的答案,以显示如何创建动物的匿名子类来表示一只狗,而不实际创建一个名为Dog的类。 – 2012-07-24 10:35:30
为了覆盖你必须扩展该类中的方法。这就是重写意味着什么:使用与超类相同的签名方法。
谢谢你回答这个基本问题。 :) – 2012-07-24 07:33:42
否,覆盖意味着继承父类的行为,如果不扩展类,这是不可能的。
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
谢谢你回答这个基本问题。 :) – 2012-07-24 07:34:39
重写定义说的行为..
的实例方法d在具有相同签名(名称,加上其参数的数量和类型)的子类中,并且返回类型作为超类中的实例方法覆盖超类的方法。
所以AFAIK如果你没有扩展超类没有办法覆盖该方法。
受保护的只能被其他包中的子类访问。同一包中的类也可以访问受保护的字段,方法和构造函数,即使它们不是受保护成员类的子类。
替代: 具有相同签名的子类中的实例方法。
回答你的问题的:
但是,如果你不想extends
Animal class
在Machine class
那么它不重写它只是一个正常的自己的类的功能。
你尝试过吗?结果是什么? – 2012-07-24 07:25:41
继承之后出现重写...你说的是不可能的...... :) – 2012-07-24 07:31:12