首页 > 其他 > 详细

父类引用指向子类对象--面向对象的多态

时间:2018-07-30 16:22:52      阅读:189      评论:0      收藏:0      [点我收藏+]

先上代码

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

父类引用指向子类对象--面向对象的多态

原文:https://www.cnblogs.com/java-spring/p/9390926.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!