zoukankan      html  css  js  c++  java
  • 父类引用指向子类对象--面向对象的多态

    先上代码

    package com.fuzi.demo;
    
    public class FuZi {
        public static void main(String[] args) {
            FuLei fuLei = new ZiLei();
            fuLei.print_info();
        }
    }
    
    class FuLei {
        public void print_info() {
            System.out.println("父类的print_info");
            System.out.println(this.getClass());
            fun();
        }
    
        public void fun() {
            System.out.println("我是父类!");
        }
    }
    
    class ZiLei extends FuLei {
        public void fun() {
            System.out.println("我是子类!");
        }
    }

    输出如下

    首先需要明白多态的定义:

    1、使用父类类型的引用指向子类的对象;

    2、如果子类重写了父类的虚方法,那么调用这个方法的时候,将会先调用子类的方法--动态调用/动态连接

    3、父类引用指向子类对象---也称之为“上溯造型”,父类的方法称之为“虚方法”,需要注意的是方法是调用子类自己的(如果子类没有才去调用父类的),属性是调用父类的。

    总结如下:

    继承、重写、父类引用指向子类对象

    顺便说一下类型转换的问题:

    1、父对象=new 父类();

    2、子对象=new 子类();

    3、父对象=new 子类();

    4、{

      父对象=new 子类();

      子对象=(子类)父对象; //强制类型转换

       }

    需要注意的是:

    5、{

       父对象=new 父对象();

       子对象=(子类)父对象;

       }

    5是不对的,

    原因:在new一个子类对象的时候,会在堆内存中申请空间来存储子类对象,

    另外,了解一下JVM初始化步骤:

     1、假如这个类还没有被加载和连接,则程序先加载并连接该类

     2、假如该类的直接父类还没有被初始化,则先初始化其直接父类

     3、假如类中有初始化语句,则系统依次执行这些初始化语句

    所以初始化子类的时候,父类会先被初始化。

    子类继承父类,他可能会比父类拥有更多的方法或者成员变量,子类转换城父类属于向上转型,及多态。

    在5中实例化的对象是父类,子类并没有被分配空间,如果把父类的实例化对象强转为子类,子类就是一个空壳子,必然会造成类型转换异常。

  • 相关阅读:
    Jmeter接口测试01
    JSON数据
    HTTP协议概念
    接口测试-概念
    appium 元素定位
    从一个猜单词的小程序开始---征服OOP的思维方式01
    WINDOWS程序设计(003)----窗口类的注册
    WINDOWS程序设计(002)----HELLOWIN程序(源代码及详细解析) WINDOWS程序原理
    Windows下Apache Tomcat?的下载安装和使用
    Windows10下配置虚拟机Virtual Box安装CentOS(Linux)详细教程
  • 原文地址:https://www.cnblogs.com/java-spring/p/9390926.html
Copyright © 2011-2022 走看看