java语言------------多态内存图分析

本文探讨了Java中多态性的使用,分析了不使用多态和使用多态的情况,并通过示例说明了如何在多态场景下进行强制类型转换。文章还详细介绍了多态时内存的状态,强调了`this`和`super`关键字的作用,并提供了内存分析图以辅助理解。
摘要由CSDN通过智能技术生成

目录

 

1.1为什么使用多态,此为没有使用多态的情况

1.2.使用多态的情况是这样

2.1.多态例子练习多态情况下父类的引用不能指向子类特有的成员变量(或成员函数)强制类型转换后可以指向子类对象这时候就需要强制类型转换

3.1多态内存分析


1.1为什么使用多态,此为没有使用多态的情况

package Polymorphism;



/**
 * @author zhao xuke
 *
 *1.继承、重写、父类的引用指向子类
 *2.编译时类型(一般是个父类)由声明时的类型决定
 *3.运行时类型(运行时具体是哪个子类就是哪个子类)   由实际对应对象类型决定
 *4.多态情况下父类的引用不能指向子类特有的成员变量(或成员函数)强制类型转换后可以指向子类对象
 *5.数据类型的转换 ;
 *        5.1.基本数据类型的转换       
 *        自动类型转换;  小数据类型 转为 大数据类型   int->float
 *        强制类型转换:  大数据类型 转为 小数据类型   float->int
 *        5.2.引用(系统)数据类型转换 
 *        自动类型转换: 小数据类型 转为 大数据类型    子类->父类  Father  f = new Son();
 *        强制类型转换: 大数据类型 转为 小数据类型    父类->子类  Father f = new Son();  Son s = (Son)f;如果这
 *        不强转就会与要点4矛盾,并抛出ClassCastException表示强转类型转换失败
 *6.1 注意: 引用数据类型的转换是建立继承的基础上,如果两个类没有继承关系,那么强转的话会报错
 *6.2       进行强制类型的转换(父类->子类 即  Son s = (son)f;)之前父类的引用已经指向了子类
 *7.父类的引用指向子类的对象情况有  
 *                           1. 父类对象做形参子类对象做实参
 *                           2.  Father f = new Son();
 *                                  Son s = (Son)f;
 *                            
 *                           3.    Son s = new Son();
 *                              Father f = s;
 *                                son s1 =(Son)f;
 *                           4.    Father f = new Father();
 *                                 Son s    = new Son();
 *                                        f = s;          // 此为父类的引用指向子类的对象
 *                                  Son s1  = (son)f;                                                 
 *
 * 2018年4月12日 - 下午1:26:29
 */
public class Animal {
	public void printVoice(){
		System.out.println("动物的叫声");
	}

}
class Dog extends Animal{
	public void printVoice(){
		System.out.println("旺旺");
	}
}
class Cat extends Animal{
	public void printVoice(){
		System.out.println("喵喵");
	}
}

class Pig extends Animal{
	public void printVoice(){
		System.out.println("哼哼");
	}
}
package Polymorphism;
/**
 * @author zhao xuke
 *
 * 2018年4月12日 - 下午1:29:28
 */
public class Test {
	
	public static void testPrintVoice(Dog d){
		d.printVoice();
		
	}
	public static void testPrintVoice(Cat c){
		c.printVoice();
	}
	public 
  • 4
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值