//下面我结合实例解释一下java中动态性实现
问题class base
{
public int ageOfBase=10;
public void display()
{
System.out.println("display() in base!");
}
public void display1()
{
System.out.println("display1() in base!");
}
private void show()
{
System.out.println("show() in base!");
}
}
class test extends base
{
public int ageOfTest=10;
/*这个函数改写父类方法
但是他并不是简单完成自己的功能;
在实现自己的应该实现的功能同时他还保留了父类的功能
*************************************
重要的是如果你没有改写这个父类方法的话, 子类test还是存在这样的方法的,只是存在的方法实际上是从父类继承来的,只是简单的实现父类实现的功能。
*/
public void display()
{
System.out.println("display() in test!");
super.display();
}
//注意我并没有改写方法display1(),但是这个方法由于继承的原因
//子类test中还是存在的
//我写一个新的方法为子类
public void display2()
{
//这里引用父类的私有方法
//这个方法在子类中并不存在的
//但是一定要记住:
//访问父类的私有成员是不允许的
//super.show();
//这里引用父类的共有方法
//实际上这里引用是子类中的方法
//因为这个方法已经从父类继承了
display1();
//下面这样引用也可以的
//这里是真正引用父类的方法的
// super.display1();
//上面这一点可能讲的不是很清楚的
//下面我换一种例子
//这个是子类的
display();
//这个是父类的方法
super.display();
System.out.println("display2()in test!");
}
public static void main(String args)
{
test t=new test();
base b=new base();
//下面这一句是多态性的根本
//一个父类的引用指向子类
b=t;
//这样通过父类的引用调用方法的话
//实际上是执行子类中实现的方法
/*
下面我结合我对面向对象编程的掌握和研究情况谈一下我的经验和看法其间我不能保证我说的每一点都正确,只是给你参考对于多态性这个面向对象编程领域很重要的概念。我结合c++以及针对java中的实际情况做几点说明。
(1)最好对于虚拟指针以及虚拟指针表格有一定了解。不了解的话,你只能是记住我说的,但是不一定能理解很好。
(2)父类引用指向子类。方法调用的时候执行的是子类的方法。这个说法是有很多前提和意外的。
下面我举一个例子
*/
b.display();
// 下面调用会出错的
//t.display2();
//应该象下面那样
((test)b).display2();
int temp1=b.ageOfBase;
// 下面调用会出错
//int temp2=t.ageOfTest;
//应该向下面那样
int temp2=((test)b).ageOfTest;
/*