java 方法重载的时候,同一个类,父子类,调用哪个方法的问题

 我来答
育知同创教育
2017-11-01 · 百度知道合伙人官方认证企业
育知同创教育
1【专注:Python+人工智能|Java大数据|HTML5培训】 2【免费提供名师直播课堂、公开课及视频教程】 3【地址:北京市昌平区三旗百汇物美大卖场2层,微信公众号:yuzhitc】
向TA提问
展开全部

package com.java.test;

public class Test extends Parent {



public static void main(String[] args) {
System.out.println("haha");
Test t= new Test();
t.t2(3);
}

public void t2(int a) {
System.out.println("t2的int a=="+a);
}

public void t2(double a) {
System.out.println("t2的double a=="+a);
}

}

class Parent {

}

打印结果:

haha
t2的int a==3

2、父子类中,重载(不是覆盖)

难点:

区分当子类的对象,强制转换成父类的时候:重写(覆盖)与重载的区别。覆盖调用子类的方法,重载只调用父类的方法

情况一:若以父类A为入口,父类的对象a,

(1)若父类中有这个方法,就调用(父类的方法),

代码

package com.java.test;

public class Test extends Parent {



public static void main(String[] args) {
System.out.println("haha");
Test t = new Test();
t.t2(3);
//这种情况下,区分重写(覆盖)的区别。覆盖调用子类的方法,重载只调用父类的方法
Parent t3 = (Parent) t;
t3.t2(3);


}

public void t2(int a) {
System.out.println("子类t2的int a==" + a);
}

}

class Parent {


public void t2(double a) {
System.out.println("父类t2的double a==" + a);
}
public void t2(String s){
System.out.println("父类t2的String s==" + s);
}

}

haha
子类t2的int a==3
父类t2的double a==3.0

(2)如果没有也不会调用子类的方法,只会出错。

代码

class Parent {



public void t2(String s){
System.out.println("父类t2的String s==" + s);
}

若父类中只有这个方法,他也不会调用子类的方法。只会在

Parent t3 = (Parent) t;
t3.t2(3);//此句报错,出错

截图如下:当以父类为入口的时候,下面这两个t2都是父类的方法。





情况二:以子类为入口,
子类既能调用自己的重载的方法,又能调用父类的原来的方法,具体调用谁,看参数跟谁匹配,
如果都匹配,看与谁最匹配,所以我们写程序的时候,尽量把父类的重载的方法的参数列表尽量区分开。

如下图:


具体实际调用的时候,调用谁,看参数与谁最匹配,如果子类没有t2(int a)方法,他当然就会调用父类的方法了。。

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式