多态

1.下边的程序运行结果是什么?

2.你如何解释会得到这样的输出?

3.计算机是不会出错的,之所以得到这样的运行结果也是有原因的,那么从这些运行结果中,你能总结出Java的哪些语法特性?

源代码:

package duotai;

 

class Parent

{

    public int myValue=100;

    public void printmyValue()

    {

   

    System.out.println("Parent.myValue,myValue="+myValue);

    }

}

class Child extends Parent {

    public int myValue=200;

    public void printmyValue()

    {

       System.out.println("Child.printmyvalue,myValue="+myValue);

    }

 

}

 

public class ParentChildTest{

    public static void main(String[]args)

    {

       Parent p=new Parent();     //定义对象并使对象指向引用p

       p.printmyValue();         //引用调用方法

       Child c=new Child();

       c.printmyValue();

       p=c;        //引用子类引用,调用方法时也是调用子类方法

       p.printmyValue();   //输出200

      

       p.myValue++;

       p.printmyValue();

      

       ((Child)p).myValue++;

       ((Child)p).printmyValue();

      

    }

}

实验结果截图:

解释输出结果:

  1. 第一个输出是Parent类的引用调用其方法从而输出myValue的值100.
  2. 第一个输出是Child类的引用调用其方法从而输出myValue的值200.
  3. 第三个输出200,是由于Parent类的引用对象p引用Child类的引用对象c,因此p调用printmyValue()方法来自于Child类,故输出结果是200
  4. 第三个输出200,是由于
  5. 第五个输出201,是由于基类对象通过(Child)p从而赋给子类对象,故(Child)p调用printmyValue时调用的是Child的方法,从而输出201.

Java语法特性:

当子类与父类拥有一样的方法,并且让一个父类变量引用一个子类对象时,到底调用哪个方法,由对象自己的“真实”类型所决定,这就是说:对象是子类型的,它就调用子类型的方法,是父类型的,它就调用父类型的方法。

请使用javap查看编译器为TestPolymorphism.java生成的字节码指令,然后通过互联网搜索资料,尝试从底层开始理解Java编译器是如何为多态代码生成字节码指令,在程序运行过程中,多态特性又是如何实现的。

class Parent

{

public int value=100;

public void Introduce()
{

System.out.println("I'm father");

}


}

class Son extends Parent
{

public int value=101;

public void Introduce()
{

System.out.println("I'm son");

}

}


class Daughter extends Parent
{

public int value=102;
public void Introduce()
{

System.out.println("I'm daughter");

}

}

public class TestPolymorphism
{


public static void main(String args[])
{

Parent p=new Parent();

p.Introduce();

System.out.println(p.value);

p=new Son();

p.Introduce();

System.out.println(p.value);

p=new Daughter();

p.Introduce();

System.out.println(p.value);


}


}

结果:

I'm father
100
I'm son
100
I'm daughter
100

用多态的方法模拟ATM操作

 

结果截图:

原文地址:https://www.cnblogs.com/dzkwwj/p/6079616.html