zoukankan      html  css  js  c++  java
  • Java面向对象——特征之三:多态性

    多态性可以理解为一个事务的多种形态。

    1.如何使用

    父类的引用指向子类的对象。如:

    有个父类Person,有个子类Man:

    Person p1=new Man();

     左边是父类的声明,右边是子类的对象

     2.使用(虚拟方法调用)

    有了对象的多态性以后,我们在编译期,只能调用父类中声明的结构,但是在执行期,我们实际执行的是子类重写父类的方法。

    即:编译看左边;运行看右边

    注意:对象的多态性不适用于属性,只适用于方法

     3.多态性的使用前提

    • 要有类的继承关系

    4.为什么要有多态性

    示例:

    一个Animal类,下面有两个子类Dog与Cat继承自这个类:

    package com.xlx.java;
    
    public class Animal {
        public void eat() {
            System.out.println("动物,进食");
        }
        
        public void shout() {
            System.out.println("动物,叫");
        }
        
    }
    
    class Dog extends Animal{
        public void eat() {
            System.out.println("狗吃骨头");
        }
        
        public void shout() {
            System.out.println("狗,汪汪!");
        }
    }
    
    class Cat extends Animal{
        public void eat() {
            System.out.println("猫吃鱼");
        }
        
        public void shout() {
            System.out.println("猫:喵喵!");
        }
    }

    在入口文件中调用

    package com.xlx.java;
    
    public class HelloWorld {
        public static void main(String[] args) {
    
            System.out.println("Hello!");
            
            HelloWorld a=new HelloWorld();
            a.func(new Dog());
            a.func(new Cat());
        }
    
        public void func(Animal animal) {
            animal.eat();
            animal.shout();
        }
    }

     输出:

     4.虚拟方法的调用(Virtual Method Invocation)

    正常的方法调用:

    Person e=new Person();
    
    e.getInfo();

     虚拟方法调用(多态情况下):

    子类中定义了与父类同名同参数的方法,在多态情况下,将此时父类的方法称为虚拟方法,父类根据赋给它的不同子类对象,动态调用属于子类的该方法,这样的方法调用在编译期是无法确定的。

    Person e=new Student();
    e.getInfo();    // 调用子类(Student类)的getInfo方法

    即:

    编译时e为Person类型,而方法的调用是在运行时确定的,所以调用的是Student类的getInfo方法。——动态绑定

  • 相关阅读:
    __doPostback在客户端控件中的作用
    BlogEngine学习二:基于ICallbackEventHandler的轻量级Ajax方式
    JS操作XML数据备忘
    JS解析DataSet.GetXML()方法产生的xml
    JS中的prototype的使用方式
    实体类的二进制序列化
    PostgreSQL的.NET驱动程序Npgsql中参数对象的一个Bug
    PDF.NET的SQL日志
    PostgreSQL的PDF.NET驱动程序构建过程
    使用XSD编写具有智能提示的XML文件(以SQLMAP脚本为实例)
  • 原文地址:https://www.cnblogs.com/codexlx/p/13535654.html
Copyright © 2011-2022 走看看