`
瘋叻ハ.兩
  • 浏览: 81464 次
  • 性别: Icon_minigender_1
  • 来自: 宁德
社区版块
存档分类
最新评论

造型(Casting) --- 多态的延续

阅读更多



       于此,在次申明个人觉得把握多态的最重要的一点:(方法)编译看定义、运行找实际。(属性)两者皆可抛,是啥就是啥。

      造型Casting,也许大家大家看着会有点陌生,但是ClassCastException相信大家会有见过,这个异常是转型前后不一致时就会报出的。也许会出现这么个情况:想让对象变量编译时就调用运行时方法。那么别无选择,你得重新为这个变量造型,也就是类型转换。

      造型,从变量是否含有对象特征,可分为基本数据造型和对象造型(且看图2和图3)。基本类型并没有对象的特征,它没有属性和方法甚至构造器,只是Java为了照顾传统程序员的习惯。以下是图片上主要意思的代码

      相关代码

 

/**************************************************
 * explain for picture 2 and picture 3 ,群:152380972                                              
 * @author:      瘋叻ハ.兩                                                                              
 * @revision:    1.0                                                        
 * @create-time: 2011-9-7 上午09:09:14                                               
 ***************************************************/
public class CastingTest1 {

	public static void main(String[] args) {
		
		// casting of basic data type		
		double d = 13;
		// cast 
		int l = (int)d;
		System.out.println("数据已丢失部分,值从"+ d + "变为" +l);
		
		// casting of object type
		Object obj = "Hello"; 		// automatically change from String to Object
		String temp1 = (String)obj;	// cast from Object to String
		System.out.println("转型前后一致,值还是:"+temp1);
		
		// 
		try{
			Integer ma = (Integer)obj;
			System.out.println(ma);
		}catch(Exception e){
			e.printStackTrace();
		}	
	}

}

  

      运行结果

 

        分  析  :看代码注释

 

      从上面的例子我们可以得到2个信息:1、基本数据类型的强制转换是我们不能控制的,但是对象还是可以的 2、基本数据类型缺乏面向对象的特征。下面归纳个人的总结方法(尽量将知识点结合一起)

      1、防止对象转型抛出异常,可通过关键字instanceof进行判断。使用instanceof可以判断前面的对象是否是后面的类(编译时类型),或者其子类、实现类的实例。如果是,返回true,否则false。格式如:

a instanceof B // 判断a对象是否为B类的实例

但是请注意:instanceof运算符前面的操作数据的编译时类型要么与后面一致,要么是后面类的父类,否则会出现编译错误。且看示例代码。

       相关代码

 

import java.io.Serializable;

/**************************************************
 * test instanceof【群:152380972】                                               
 * @author:      瘋叻ハ.兩                                                                              
 * @revision:    1.0                                                        
 * @create-time: 2011-9-7 下午12:32:37                                               
 ***************************************************/
public class InstanceofTest {

	public static void main(String[] args) {
		
		// declare a variable
		// declared type is Object, actual type is String
		Object obj = "Hello";
		
		System.out.println("字符串是否是Object类的实例:" + (obj instanceof Object));
		System.out.println("字符串是否是Math类的实例:" + (obj instanceof Math));
		
		// class String implements Serializable 
		System.out.println("字符串是否是Serializable接口的实例:" + (obj instanceof Serializable));
		
		// prove the attention 
		String hello = "hello";
		// System.out.println("字符串是否是Math类的实例:" + (hello instanceof Math));  // cann't be compiled
	}
}

        运行结果

                    字符串是否是Object类的实例:true
                    字符串是否是Math类的实例:false
                    字符串是否是Serializable接口的实例:true

 

         分  析  :结合上文与代码注释

 

       2、基本数据类型的转换,个人建议分两种:

            2.1、自动类型转换,则没有任何问题。

            2.2、

强制类型转换,建议使用数据的包装类,包装数据。这样就可以体现Java面向对象的编程啦,使用起来就方便多了。下面简单介绍基本数据的包装。   

       相关代码

/**************************************************
 * different time, different wrapper.【 群:152380972 】                                
 * @author:      瘋叻ハ.兩                                                                              
 * @revision:    1.0                                                        
 * @create-time: 2011-9-7 下午01:16:41                                               
 ***************************************************/
public class WrapperTest {

	public static void main(String[] args) {
		
		/*
		 *  before JDK 1.5, you should create a object by constructor! for example int
		 */
				
		// declare int variable 
		int it = 5;
		// create Integer object by using int variable
		Integer itg = new Integer(it);
		// print the value as byte、float...
		System.out.println(itg.intValue());
		
		/*
		 *  since JDK 1.5, the new feature of Autoboxing and AutoUnboxing makes wrapper more easily.
		 *  for example int
		 */
		
		/*
		 * it can automatically evaluate basic data type to object type, 
		 * but the left type must be the same as the right type whethor Autoboxing or AutoUnboxing 
		 * or it will cause an Exception
		 */
		
		// create an Integer object by Autoboxing
		Integer itgr = 10;
		
		// AutoUnboxing
		int it2 = itgr;
		System.out.println(it2);
		// transform Integer into String
		System.out.println(String.valueOf(itgr));	
	}

} 

       运行结果

                    5
                    10
                    10

 

         分  析  :结合上文与代码注释

 

      从最后一个结果我们可以看到,包装后的基本数据类型就能很好的与String交互(更多详情,请查询API)。不仅如此,基本数据类型的包装也为浮点型的精度提供了解决思路。这个类是BigDecimal,有兴趣的可查阅API或者加入我的群一起交流。

     

      如果想创建不可变类、父类的方法不想被子类重载...答案尽在下篇---> final

  • 大小: 33.6 KB
  • 大小: 37.3 KB
  • 大小: 27.8 KB
0
1
分享到:
评论

相关推荐

    光线投射概念Raycasting--Unity 官方教程 物理系统

    光线投射概念Raycasting--Unity 官方教程 物理系统 视频教程

    monogram-casting-源码.rar

    Monogram Casting 是一个可能涉及软件开发或编程技术的项目,其源码被封装在名为 "monogram-casting-源码.zip" 的压缩文件中。这个项目的名字暗示了它可能与自定义字符、个性化铸造或者编程中的模式生成有关。在分析...

    PyPI 官网下载 | type_casting-0.4.0.tar.gz

    《PyPI官网下载 | type_casting-0.4.0.tar.gz:深入解析Python类型转换库》 在Python编程中,类型转换是一项基础且至关重要的任务。开发者常常需要将数据从一种类型转换为另一种类型,以满足特定的操作或函数需求。...

    RayCasting-tutorial.rar_RayCasting tutorial_ray casting_ray cast

    《光线投射(Ray Casting)教程:CPU实现与解析》 光线投射(Ray Casting)是一种在计算机图形学中广泛使用的算法,它主要用于在3D环境中进行场景渲染和交互。光线投射的基本思想是从观察者的位置出发,沿着视线...

    Raycasting-JS:我的 Java 3D 引擎的 Javascript 端口

    Raycasting-JS 是一个将Java 3D渲染技术移植到JavaScript平台的项目。这个引擎利用了JavaScript的灵活性和现代浏览器的高性能特性,为Web应用程序提供了一种在浏览器中实现3D图形的方式。以下是对这个项目的详细解读...

    casting-agency:Udacity FSND最终项目

    介绍注意:完整项目:capstone-abduaziz.herokuapp.com 在heroku中托管的Project API :rocket: :abduaziz-casting-agency.herokuapp.com 项目API文档:abduaziz-casting-agency.herokuapp.com/docs :warning: 用于...

    Casting-Agency-Web-App

    Casting-Agency-Web-App 此网络应用程序可模拟演员公司的形象,并有助于演员和电影的管理。 Web应用程序使用身份验证,并具有具有特定权限的角色。 Web应用程序支持添加新演员,新电影并为电影分配演员。 删除演员和...

    RayCasting-nim:Nim制造的RayCasting引擎

    RayCasting-nim是一个使用Nim编程语言编写的RayCasting引擎。RayCasting是一种图形渲染技术,尤其在早期的2D游戏开发中被广泛使用,例如经典的《毁灭战士》。这种技术通过模拟光线在虚拟环境中的传播来创建3D视觉...

    Casting-Project:连续铸造项目的GUI

    Casting-Project:连续铸造项目的GUI

    Ray casting算法--CT三维重建简例

    ### Ray Casting 算法与 CT 三维重建 #### 一、引言 Ray casting(光线投射)算法是计算机图形学中一种重要的三维图像重建技术,在医学影像处理领域尤其重要,例如 CT 和 MRI 图像的三维可视化。该算法通过模拟...

    raycasting-js:用p5.js进行的光线投射

    raycasting-js 这是使用JavaScript和P5.js进行的一些射线广播。 射线广播是一种最初在Wolfenstein 3D中实现的渲染技术。 您可以在这里播放: : 待办事项清单 纹理(我尚不知道该怎么做) 碰撞 实时地图编辑器没有...

    raycasting-v2

    光线投射测试V2,我想尝试一种更有效的光线投射方法。 这是我高中毕业项目的一部分。 我想使用Javascript中的光线投射来创建3D引擎。 有了它,无需经过光线投射实施,就可以创建简单的游戏。 这就像创建2D游戏一样...

    casting-agency-api

    铸造公司API 该API的目的是帮助助手,导演和制作人管理他们目前正在从事的人才和项目。该API提供了用于处理有关演员和电影的信息的端点。 安装 要在本地安装此应用程序,请克隆此存储库并安装列出的要求: ...

    StarCraft-Casting-Tool:StarCraft Casting Tool是一个免费使用的开放源代码程序,它通过提供比赛抓取器以及各种向观众显示的动画图标和浏览器资源,简化了StarCraft 2的铸造过程,同时大幅提高了生产价值

    StarCraft Casting Tool (SCC工具)是一个免费的开放源代码程序,通过提供匹配捕获器,预定义的自定义格式以及要呈现给用户的各种动画图标和浏览器源,可以轻松铸造StarCraft 2,同时大幅提高生产价值。观众。 重要...

    raycasting-study:有关Java中的Raycasting的研究

    射线广播研究 该技术包括在2D地图上移动方块(玩家)并“投射”射线,直到射线撞击墙壁。 对于击中的墙的每个像素,在另一个画布中渲染一个等效的矩形。 所有这些矩形(根据玩家的距离具有正确的颜色和大小)给人以...

    Casting-Agency

    在IT行业中,"Casting-Agency"可能是一个与演员挑选或人才招聘相关的项目,而它与"Python"的关联表明这个项目是用Python编程语言实现的。Python是一种广泛使用的高级编程语言,以其简洁的语法和强大的功能而闻名,...

    3D-canvas-raycasting.zip

    在canvas-raycasting-master项目中,开发者可能会使用一些优化技巧,如预计算光照贴图或使用光线缓冲区,以提高性能。此外,交互性也是重要的部分,用户可能可以通过鼠标或触摸事件改变视角、旋转物体或者调整光照...

    Ray-Casting-Algorithm:使用光线投射算法检查点是在多边形内部还是外部

    光线投射算法 使用光线投射算法检查点是在多边形内部还是外部 确定点是在简单多边形内部还是外部的一种简单方法是测试从该点开始并沿任何固定方向行进的射线与多边形边缘相交的次数。 如果所讨论的点不在多边形的...

    Sicse Narrow Casting-crx插件

    语言:English 将Chrome浏览器转换为狭窄的铸造环境。 在我们的客户网站上我们创建了一个包含全屏幻灯片展示的网页。通过使用我们的扩展,我们将Chrome Web浏览器转换为数字标牌解决方案。激活扩展后,当前浏览器选项...

Global site tag (gtag.js) - Google Analytics