java继承中同名函数的问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java继承中同名函数的问题相关的知识,希望对你有一定的参考价值。
有class A,其中有两个方法function1()和function2(),其中function2()中调用了function1()方法,另有一个class B extends A,并且重写了function1()方法。则B b = new B();b.function2();时,function2()调用的是父类A中的function1()方法,如何能够调用子类B中重写了的function1()方法呢????
就直接B b = new B();b.function1();就OK了啊。这个很容易理解啊,你要是想用b中的重写的方法就直接调用就完了,这时就跟A中的没关系。B中重写的方法就是为了修改A中的不足。但是继承了A中的function2.继承就是想要得到父类中的有用的,对父类没用的就重写掉。然后B就相当于一个更符合需求的一个新类。想要调用重写的方法就可以认为新方法和父类没有任何关系。对于新的子类就相当于一个新的类,该怎么调用怎么调用。 参考技术A 因为B继承A;那么A a = new B();是A的一个实例
a.function2();调用A中的function1();,但是A中的function1();被重写,那么实际调用的是B中的function1();,最终只需要:A a = new B();,然后a.function2(); 参考技术B
我按你说的试验了,结果调动的是B中的f1 啊,是不是你哪里写错了?
重写的f1 参数和返回值与之前的一致么?
package aaa;public class A
public void f1()
System.out.println("a.f1");
public void f2()
System.out.println("a.f2");
f1();
package aaa;
public class B extends A
public void f1()
System.out.println("b.f1");
public static void main(String args[])
B b = new B();
b.f2();
追问
现在可以了,把父子类中的f1()都改成public就能够调用子类f1()了,我之前f1()使用private修饰的,就会调用父类的f1()。。。。虽然还不太明白为什么,不过还是你的答案最好,谢谢!
追答囧。。。建议你先看下 private public protect 和 friendly(或者不写) 的区别。估计你就明白了。
本回答被提问者采纳 参考技术C 这样。A a = new B();a.fuction1();这样就可以了,这样是多态性的一种表现。 参考技术D 重写function2()
C++ 继承同名成员处理方式
通过子类对象 访问到父类中同名成员 需要加作用
如果子类中出现和父类同命的函数,子类中的同名成员会隐藏掉父类中所有同名成员函数
调用父类中被隐藏的同名成员的函数,需要加作用域
# include<iostream>
# include<string>
using namespace std;
//继承中同名成员处理
class Base
{
public:
Base()
{
m_A = 100;
}
void func()
{
cout << "Base的Func调用" << endl;
}
void func(int a)
{
cout << "Base的Func(int a)调用" << endl;
}
int m_A;
};
class Son :public Base
{
public:
Son()
{
m_A = 200;
}
void func()
{
cout << "Son的Func调用" << endl;
}
int m_A;
};
//同名属性的处理方式
void test()
{
Son s;
cout << "Son:m_A = " << s.m_A << endl;
//通过子类对象 访问到父类中同名成员 需要加作用域
cout
以上是关于java继承中同名函数的问题的主要内容,如果未能解决你的问题,请参考以下文章