10.3 对象类型的转换

1、向上转型

  a、平行四边形类继承了四边形类,常规的继承图都是讲顶级类设置在页面的顶部,然后逐渐向下,所以将子类对象看做是父类对象被称为“向上转型”。由于向上转型是ongoing一个具体的类型到较抽象类型的转换,所以它总是安全的,如可以说是平行四边形是特殊的四边形,但不能说四边形是平行四边形。
  b、如果在四边形父类的draw()方法中根据不同的图形对象设置不同的处理,就可以做到父类中定义一个方法完成各个子类的功能,这样可以使用同一份代码毫无差别地运用到不同类型之上,这就是多态机制的基本思想(在10.6节中将对多态进行详细的介绍)。

例子10.5

 1 package aaaa;
 2
 3 class Quadrangle{        //四边形类
 4     public static void draw(Quadrangle q) {        //四边形类中的方法
 5         //SomeSentence
 6         System.out.println("调用四边形draw()方法!");
 7     }
 8 }
 9
10 public class Parallelogram extends Quadrangle{        //平行四边形类,继承了四边形类
11     public static void main(String[] args) {
12         Parallelogram p = new Parallelogram();        //实例化平行四边形对象引用
13         draw(p);        //调用父类方法
14     }
15 }

2、向下转型
a、通过向上转型可以推理出向下转型是讲较抽象类转为较具体的类。这样的转型通常会出现问题。可以说子类对象总是父类对象的一个实例,但父类对象不一定是子类对象的实例。
b、在做向下转型操作时,需要告知编译器这个四边形就是平行四边形。将父类对象强制转换为某个子类对象,这种方式成为现实类型转换。
c、当在程序中使用向下转型技术时,必须使用现实类型转换,向编译器指定将父类对象转换为哪一种类型的子类对象。

例子10.6

 1 class Quadrangle_A{
 2     public static void draw(Quadrangle_A q) {
 3         //SomeSentence
 4         System.out.println("调用父类中的draw()方法");
 5     }
 6 }
 7 public class Parallelogram_A extends Quadrangle_A{
 8     public static void main(String[] args) {
 9         draw(new Parallelogram_A());        //调用父类draw()方法
10
11         //将平行四边形类对象看做是四边形对象,成为向上转型操作
12         Quadrangle_A q = new Parallelogram_A();
13
14         //将父类对象赋予子类对象,这种写法是错误的
15         //Parallelogram_A p = q;
16
17         //将父类对象赋予子类对象,并强制转型为子类型,这种写法是正确的
18         Parallelogram_A p = (Parallelogram_A)q;
19         draw(new Parallelogram_A());        //调用父类draw()方法
20     }
21 }

原文地址:https://www.cnblogs.com/studycode/p/9533155.html

时间: 2024-10-17 00:35:53

10.3 对象类型的转换的相关文章

JavaScript中对象类型的转换小结

对象到字符串和对象到数字类型的转换涉及到两个重要的方法,最终的转换结果会受到这两个方法返回结果的影响,这两个方法就是toString和valueOf.所有的对象都会从Object对象中继承到这两个方法.toString方法 用于返回对象的字符串表示(但是其实也可以不返回字符串).对于默认从Object继承而来的toString方法并不会返回太多有意义的内容.而valueOf方法目的是返回一个可以表示对象的原始类型值,但是由于对象的复杂性,大多数情况下根本不可能用一个原始类型值来表示,所以默认的v

第10章 接口、继承与多态 对象类型的转换

向上转型: 将子类对象看作是父类对象: 解释:平行四边形是四边形的一种,那么就可以将平行四边形对象看作是一个四边形对象.例如:鸡是家禽的一种,而家禽是动物中的一类,那么也可以将鸡对象看作是一个动物对象. package ten; class Quadrange{//四边形类 public static void draw(Quadrange q){//四边形类中的方法 } } public class Parallelogram extends Quadrange{//平行四边形类,继承了四边形

java 对象类型的转换

import com.java.charpt05.NewStr; class Quadrangle{    public static void draw(Quadrangle q)    {        System.out.println(q.getClass().getName());    } }public class Parallelogram extends Quadrangle{    public static void main(String[] args) {      

对象类型的转换

JS->JQ var jqObject=$(jsObj); JQ->js var jsObject=jqObj.get(0); 详细代码: function getjs(){ var jsobj=document.querySelector("#box"); var jqobj=$(jsobj); jqobj.addClass("classdiv"); } function getjq(){ //获取jq对象 var jq=$("#box&qu

php中对象类型与数组之间的转换

1.刚看视频学习的时候看到一个困扰很久的问题, 有时候我们在进行做项目的时候会碰到的一个小问题.举一个小例子.  获取一个xml文件里面的数据. xml.xml文件如下: <?xml version="1.0" encoding="ISO-8859-1"?><note> <to>George</to> <from>John</from> <heading>Reminder</h

记一次踩坑 Gson转换map对象时 Integer类型自动转换成Double类型

之前一直使用json转换map对象,因为公司统一使用gson,我按照网上转换map对象的方式转换: Map<String, Object> params = gson.fromJson(gson.toJson(payMentResultDto), Map.class); 结果对象里Integer类型自动变成double类型... 解决办法: 网上大致有俩种,1.修改源码(能力达不到)2.增加适配器 我找了一下,解决办法有俩种(比较实用) 1.网上看到的(自定义类型适配器),亲测可用 //这俩段

第八篇:使用字符串流对象进行格式转换

前言 字符串流对象有个很实用的功能就是格式转换.比如可以将整数类型的123转换成字符串格式的123,或者反过来.那么具体又是如何实现的?且看下文. 实现思路 对于整数转换成字符串格式,可设s是一个空的字符串流对象,” 整型变量 “存放目标整数.则当执行" s << 整型变量 "后,该整数将转成字符串格式并存进流中.随后代码中使用" s.str() "即可获取到该整数的字符串格式.对于字符串转换成整数格式,亦可设s是一个空的字符串流对象,” 整型变量 “存

PHP类型转换&amp;&amp;类型强制转换

获取数据类型 : 如果想查看某个表达式的值和类型,用 var_dump(). 如果只是想得到一个易读懂的类型的表达方式用于调试,用 gettype(). 要查看某个类型,不要用 gettype(),而用 is_type() 函数. ■字符串转换为数值 当一个字符串被当作数字来求值时,根据以下规则来决定结果的类型和值. 如果包括“.”,“e”或“E”其中任何一个字符的话,字符串被当作 float 来求值.否则就被当作整数. 该值由字符串最前面的部分决定.如果字符串以合法的数字数据开始,就用该数字作

《C#高级编程》【第7章】运算符与类型强制转换 -- 学习笔记

       运算符编程语言的基本元素,它使得我们的代码更加的简洁明了.然而我们为了解决操作数类型不同的问题,我们又有引入了强制转换的概念.我们先看看本章的内容构成吧. 1.运算符 我们来看看一些常见的运算符: <1>条件运算符 其语法如下: Condition ? true_Expression : false_Expression 当条件Condition为真时,其将执行true_Expression,否则执行false_Expression. <2> checked 和