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继承中同名函数的问题的主要内容,如果未能解决你的问题,请参考以下文章

java继承

java构造函数使用方法总结 (继承与构造函数)

java学习之继承之子父类中变量的特点

java 类的继承,子类变量的获取

JAVA中方法和变量在继承中的覆盖和隐藏

java 既然子类能继承父类的所有属性与方法,那子类不能不定义成员变量?