zoukankan      html  css  js  c++  java
  • 【小白日记】Java 多态中的两种类型转换

    为什么需要类型转换

    接之前代码示例说
    当我们创建一种动物时
    这种动物不可能只会吃东西一种方法。他们都会有自己的特定的属性及方法
    例如狗会玩游戏 猫会抓老鼠
    而这些方法因为是该宠物独有的 所以我们需要把这些方法编写到子类当中
    但是一经这样编写 当我们尝试在构造成多态的主方法当中直接调用时会发生如下结果

    package com.sky.study;
    
    public class Test2 {
    
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		Pet p = new Dog();
    		p.eat();
    		p.play(); //报错,多态当中无法直接访问子类当中独有的方法或属性
    
    	}
    
    }
    
    

    如果尝试运行会发现

    Exception in thread “main” java.lang.Error: Unresolved compilation problem:
    The method play() is undefined for the type Pet
    at com.sky.study.Test2.main(Test2.java:9)

    这是因为上面所提到的 多态当中无法直接调用子类当中独有的属性或者方法。
    这时候我们的类型转换就可以很愉快的帮助我们了。

    两种类型转换

    向上转型

    向上转型也叫自动类型转换,是构成多态的方式,也就是之前所说的构成多态的语法格式

    • 父类类型 引用名称 = new 子类类名();
    • 当是多态时,该引用名称只能访问父类中的属性和方法,但是优先访问子类重写以后的方法

    向下转型

    向下转型也叫做强制类型转换

    • 当是多态时,并且访问子类独有的属性或方法时,则必须进行向下转型
      举个例子吧
    public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		Pet p = new Dog();
    		p.eat();
    		
    		//p.play(); //报错,多态当中无法直接访问子类当中独有的方法或属性
    		Dog d =(Dog)p;
    		d.play();
    
    • 当进行向下转型时,建议先进行判断,当合法则在转为对应的类型,则使用instanceof关键字,否则可能会出现类型转换异常java.lang.ClassCastException
    if(p instanceof Dog){
    	Dog d = (Dog)p;
    	d.play();
    }
    else if(p instanceof Cat){
    	Cat c = (Cat)p
    	c.play();
    }
    
  • 相关阅读:
    例题三、简单的分支与循环结构
    第七章例题、心得及问题。
    第六章例题、心得及问题。
    第五章例题、心得及问题。
    第四章例题、心得及问题。
    第三章例题、心得及问题。
    第一章、第二章的心得及问题。
    实验3 分支结构。
    关于我最后一篇不是心得的 心得。
    关于第五章还没看完之后的 心得。
  • 原文地址:https://www.cnblogs.com/WeiHaoLee/p/10823337.html
Copyright © 2011-2022 走看看