public class Practice
{
public void show(String string) {
System.out.println(string);
}
public void show(int age) {
System.out.println("age :"+age);
}
public static void main(String[] args) {
Practice practice = new Homework();
practice.show(12345);
practice.show("shit");
practice.show('j');
}
}
class Homework extends Practice
{
public void show(char ch) {
System.out.println("character is :" + ch);
}
@Override
public void show(String string) {
System.out.println("string is : "+string);
}
}
/*outpu
age :12345
string is : shit
age :106 // 为什么不是调用子类的函数?
*/
------解决方案--------------------
方法签名不同,子类的show(char ch)没有覆盖父类的show(int age),而且char可以自动向上转型为int,show(int age)是可以接受char为参数的
------解决方案--------------------
多态是个很重要的内容:
public class Practice
{
public void show(String string)
{
System.out.println(string);
}
public void show(char age) //注意这里
{
System.out.println("age :" + age);
}
public static void main(String[] args)
{
Practice practice = new Homework();
practice.show(12345);
practice.show("shit");
practice.show('j');
}
}
class Homework extends Practice
{
public void show(int ch) //注意这里
{
System.out.println("character is :" + ch);
}
@Override
public void show(String string)
{
System.out.println("string is : " + string);
}
}
如果这样的话,程序出错!原因:
Practice虽然指向的是子类对象,在main中调用方法时,如果父类没有这个方法(没有int())或父类的方法可以向上转型为子类的方法(如char()),即使子类有同样的方法(如int()),也会出错;
------解决方案--------------------
show(char)在父类中未定义,无法调用到,但是jav会a自动将'j'转成了 int类型,所以调用了父类中的show(int)方法。
你可以在子类中定义一个方法 ,定义了父类的类型的对象是访问不到的
------解决方案--------------------
哈哈,你想的不错!