当前位置: 代码迷 >> Java相关 >> Java重载和覆写有关问题
  详细解决方案

Java重载和覆写有关问题

热度:10   发布时间:2016-04-22 20:38:46.0
Java重载和覆写问题
public class Father 
{
public void process1 (int n)
{
System.out.println("调用 Father 类中函数 " );
}
public void process2 ()
{
System.out.println("调用 Father 类中函数 2" );
}
}


public class Son extends Father
{
public void process1 (Boolean ch)
{
System.out.println("调用 Son 类中函数 ");
}
public void process2 ()
{
System.out.println("调用 Son 类中函数 2" );
}
}



public class MainTest {
public static void main(String [] args) 
{

Father object1 = new Son();
object1.process1(100);
object1.process2();

}
}



结果:
调用 Father 类中函数 
调用 Son 类中函数 2

但是如果
public class MainTest {
public static void main(String [] args) 
{

Father object1 = new Son();
object1.process1(true);
object1.process2();

}
}

就会报错。

问题:
1.我是不是永远都没办法调用Son类中的process1了?
2.object1 到底是什么类型的?
3.为什么第二种main方法中的process1不能使用Son类中的process1方法呢?
4.在堆,栈中object1 的存放和指向是什么样的?

谢谢各位大神了~
------解决思路----------------------
你可以去看看编译时类型和运行时类型的区别。
------解决思路----------------------
首先,你的process1没有被复写,因为参数不一致。
1.我是不是永远都没办法调用Son类中的process1了?
可以,将object1强制向下转型
Son s = (Son)object1;
这个时候可以调用Son中的方法了

2.object1 到底是什么类型的?
编译时Father,运行时Son

3.为什么第二种main方法中的process1不能使用Son类中的process1方法呢?
没被复写啊

4.在堆,栈中object1 的存放和指向是什么样的?
object1存放的是对象的起始地址(至于怎么从起始地址往下解译这一堆数据,则由其类型决定了)
  相关解决方案