• 多态


    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操作

     

    结果截图:

  • 相关阅读:
    645. Set Mismatch
    400. Nth Digit
    633. Sum of Square Numbers
    507. Perfect Number
    453. Minimum Moves to Equal Array Elements
    441. Arranging Coins
    Girls and Boys
    二分图
    Gap
    SZU-A22
  • 原文地址:https://www.cnblogs.com/dzkwwj/p/6079616.html
Copyright © 2020-2023  润新知