【原创】从机理欣赏语言 JAVA篇 2
在JAVA中,允许向上转型。可以利用向上转型做几个有趣的实验,去体味JAVA继承的机理。
1 同名同参数函数的继承
首先建立两个类
class Point1
{
public void Show()
{
System.out.println("Point1");
}
}
class Point2 extends Point1
{
public void Show()
{
System.out.println("Point2");
}
}
我们可以知道,继承类和基类中同时存在void Show(void)函数。接着,构建一个入口:
public class Example
{
private static void f(Point1 pt)
{
pt.Show();
}
public static void main(String[] args)
{
Point2 pt2=new Point2();
f(pt2);
}
};
我们可以看到,在main函数中,我们向f函数传入了一个Point2对象。下面是输出的结果:
Point2
结果证明,同名的函数是被覆盖了
2 同名不同参数
如果我们把类的定义变一下
class Point1
{
public void Show()
{
System.out.println("Point1");
}
}
class Point2 extends Point1
{
public void Show(int n)
{
System.out.println("Point2");
}
}
我们同样建立一个入口
public class Example
{
private static void f(Point1 pt)
{
pt.Show(1f);
}
public static void main(String[] args)
{
Point2 pt2=new Point2();
f(pt2);
}
};
结果显示,继承对象中的基子对象的函数并未被覆盖。