日期:2014-05-20  浏览次数:20732 次

java多态问题
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)方法。

你可以在子类中定义一个方法 ,定义了父类的类型的对象是访问不到的
------解决方案--------------------
引用:
Quote: 引用:

在java里面,向上转型是自动进行的,但是向下转型却不是;
一个类型引用只能引用引用类型自身含有的方法和变量,如果没有重写的话!

我是在想,void show(int age)和void show(char ch),他们只是重载,用char类型作为参数的话,最优匹配应该是void show(char ch)。。
哈哈,你想的不错!