如何调用被重写的父类方法 java
classChildAextendsParentA{publicvoidcontent(inte){System.out.println("overridedmethod...
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算你厉害。 展开
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算你厉害。 展开
4个回答
展开全部
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();
}
展开全部
这样做
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一种。
同样的,遮盖也被这么简化了。这种手法是不值得提倡而且非常容易引发错误的。
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一种。
同样的,遮盖也被这么简化了。这种手法是不值得提倡而且非常容易引发错误的。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
不知道楼主学Java多长时间了.
super 为其父类
super.toString() 为调用其父类的toString方法;
super 是Java中的关键字
ChildA a=new ChildA();
ParentA b;
b = a;
b.content(1);
楼主看了就说不行,你可曾试过.
什么是继承.
比如: 人是动物的子类. 没错吧.
为什么 某某动物不能是人呢?
我知道你的意思,不过错了罢.
父类可以指向子类,而子类不能指向父类. 答案是上面的都说对了
super 为其父类
super.toString() 为调用其父类的toString方法;
super 是Java中的关键字
ChildA a=new ChildA();
ParentA b;
b = a;
b.content(1);
楼主看了就说不行,你可曾试过.
什么是继承.
比如: 人是动物的子类. 没错吧.
为什么 某某动物不能是人呢?
我知道你的意思,不过错了罢.
父类可以指向子类,而子类不能指向父类. 答案是上面的都说对了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
super不行吗
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询