如何调用被重写的父类方法 java

class ChildA extends ParentA{
public void content(int e){
System.out.println("overrided method");
}
public void content(float e){
System.out.println("overloaded method");
}
}
class ParentA{
protected void content(int e){
System.out.println("source method");
}
}
public class ParentChild02 {
public static void main(String[] args){
ChildA a=new ChildA();
System.out.print("子类调用父类被重写方法content(int):");
a.content(1);
System.out.print("子类调用父类被重载方法content(float):");
a.content(1.0f);
System.out.print("子类调用父类原方法content(int):");
//
}
}
以上代码段//处应该怎样才能调用已经被重写的子类,显示出"source method"
不好意思,我说错了。应该是“以上代码段//处应该怎样才能调用已经被子类重写的方法,显示出"source method"”,目的是调用父类被重写的方法,而不是显示“source method”,如果只是显示,我创建一个父类就好了
回答1楼:明显不行啊,这是在其他类的方法里诶,super只有子类中可以,子类中都没定义super,其他类如何使用super?
回答4楼:只更改//并且不new Parent(),不管则么改都不可能出"source method",是这个意思吗?
回答3楼:你问我可曾试过?那我告诉你我试过。你说上面都对了,那我请问你,你可曾试过?super是关键字谁都知道啊,但是你要是有本事在parentchild02这个没有继承自任何类的类中使用super算你厉害。

    static class Parent {
        //父类方法
        void who() {
            System.out.println("I'm parent");
        }
    }

    static class Child extends Parent {
        //子类重写方法
        @Override
        void who() {
            System.out.println("I'm child");
        }
        //通过supper调用父类方法
        void parentWho(){
            super.who();
        }
    }

    public static void main(String[] args)  {
        Child child =  new Child();
        Parent parent =  new Parent();
        parent.who();
        child.who();
        child.parentWho();
    }

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-11-22
这样做
ChildA a=new ChildA();
ParentA b;
b = a;
b.content(1);

补充:
不好意思……刚才想成c++了
java无法调用被遮盖的基类方法,这思路没错,但是java不支持
java只支持使用实例调用方法,不支持引用(指针)调用,因此被遮盖的就无法调用到了,不能使用遮盖,只能用重载
具体的限制你最好查阅下书籍,sorry了。遮盖(重写)后子类无法调用基类,必须用重载声明出2个参数不同的同名函数才能变相调用基类方法

类似如下
class ChildA extends ParentA{
public void content(int e){
System.out.println("overrided method");
}
public void content(float e){
System.out.println("overloaded method");
}
public void content(long e) { //此处参数仅仅是为了重载
super.content(1); //也可以用e,具体怎么变换类型就随你了
}
}

回答下……是的
面向对象最完整的是c++,因此这种事情在c++里可以做到。但他十分危险,因为通常意义上,一个非虚函数,是绝对不应该被其子类遮盖(重写),若基类认为其某个方法需要被子类重写,那么就应该声明此方法为virtual。
若只给出声明没有定义,那么含义是要求子类必须提供自己的实现版本
若同时给出声明和定义,含义是子类若不想提供自己的实现,必须显示调用基类实现

尽管如此,c++还是允许子类遮盖基类的非虚函数,并且,这会导致一个很严重的问题,就是你希望达到的这个问题,当使用一个基类指针指向子类时,他调用的不是子类的方法,而是基类的方法。因为c++经常会用到使用基类指针去操作子类的情况,这个隐晦的问题不知道害了多少人了。
java为了避免类似这种复杂性和问题,简化了继承类型,比如没有了多重继承,继承类型也只有public一种。
同样的,遮盖也被这么简化了。这种手法是不值得提倡而且非常容易引发错误的。本回答被提问者采纳
第2个回答  2010-01-23
不知道楼主学Java多长时间了.
super 为其父类
super.toString() 为调用其父类的toString方法;
super 是Java中的关键字

ChildA a=new ChildA();
ParentA b;
b = a;
b.content(1);

楼主看了就说不行,你可曾试过.
什么是继承.
比如: 人是动物的子类. 没错吧.
为什么 某某动物不能是人呢?
我知道你的意思,不过错了罢.
父类可以指向子类,而子类不能指向父类. 答案是上面的都说对了
第3个回答  2010-01-23
super不行吗