java入门之——对象转型
对象的类型转换是我们在编程的时候常常会遇到的,java平台也是如此。比方一些基本类型的数据转型和复合数据的转换。
举例
java语言中主要分为向上转型和向下转型,怎样来了解和掌握这两者转型的关系呢?首先我们先来举个样例,相信大家看完以后就会明确了。
比方说我们的现实的世界中有动物、猫科动物、老虎这三样东西,它们三者都有什么样的关系呢?假设用面向对象的思维来考虑的话。老虎是子类,猫科动物是老虎的父类。老虎对象就是猫科动物的对象,在这里要特别说明的一点就是:老虎是猫科动物的一个对象,那么猫科动物所具有的特征老虎都有,(用面向对象来说就是有同样的属性和行为),这样的方法就是向上转型(通常也叫隐式转型)。
假设是这样转型的话是没有问题的,我们人的正常思维也是正确的,编译器在编译的时候也不会报错的。可是在工作中我们常常会遇到向下转型的情况。可是这样的向下转型时候编译器往往会报错,假设说猫科动物是老虎的话。这里应该是一个否命题(至少眼下为止),在面向对象的世界里面,越是详细的东西它所具有的特征就越多。而越抽象的东西他的特性就越少,仅仅是抽象了一些共性的东西。要确保对象向下转型的时候即编译器不会报错,又要确保详细的对象在抽象对象中也有。在这里,我们须要採用java的keyword来推断一下,instanceof,我们能够利用这个操作符来推断一个类是否实现了一个接口或者是一个类的子类。
老虎 instanceof 猫科动物,它返回的是一个布尔值。假设返回true的话说明该对象是某个类的实例,false是反之。
代码
看一下下边的程序段:
package test;
class A {
public String f(A obj)
{
return("A");
}
}
class B extends A {
public String f(B obj)
{
return("C");
}
public String f(A obj)
{
return("D");
}
}我们使用子类创建一个对象:
B b = new B();
然后再将这个子类的引用放到父类对象中:
A a;
a = b;
那么这个父类对象a是子类对象b的上转型对象。对象的实体由子类负责建立,实质还是子类,仅仅是损失了一些功能而已,这种得失详细例如以下:
得:上转型对象能够操作和使用子类继承或者重写的方法。
失:上转型对象丧失了对子类新增成员变量或新增的方法的操作和使用。
那么下边的这段測试代码的打印结果就是“D”。由于a2仅仅能有public String f(A obj) 这种方法是能够用的。public class TestObj
{
public static void main(String args[])
{ A a1 = new A();
A a2 = new B(); //子类对象转化为父类,称为上转型,不须要强制转换。 B b = new B();
System.out.println(a2.f(b)); //“D” System.out.println(); if (a2 instanceof B) {
B b1 = (B) a2; //父类对象转化为下转型,此时须要使用强制转换,此时须要先推断要转换的这个对象(也就是a2指向的这个对象)是不是B类的实例
System.out.println(b1.f(b));//"C"
System.out.println(b1.f(a1));//"D"
}
}
}
总结
对象转型能够使父类对象的引用能够指向子类对象,给程序带来了比較好的可扩展性:我们能够在一个方法的參数里面定义父类的引用,然后实际其中传的时候传的是子类的对象,然后我们再在方法里面推断这个传过来的子类对象究竟属于哪个子类,然后再去运行这个子类里面的方法或者调用这个子类里面的成员变量,因此程序的可扩展性比单独定义好多个方法要好一些。只是这个可扩展性还没有达到最好,使用多态就能够让程序的扩展性达到极致。
java入门之——对象转型的更多相关文章
- Java自学-接口与继承 对象转型
Java中的对象转型 示例 1 : 明确引用类型与对象类型的概念 首先,明确引用类型与对象类型的概念 在这个例子里,有一个对象 new ADHero(), 同时也有一个引用ad 对象是有类型的, 是A ...
- Java菜鸟学习笔记--面向对象篇(十八):对象转型&多态
Polymorphism[多态] 简述: 面向对象多态性指的是:发送消息给某个对象,让该对象自行决定响应何种行为. 通过将子类对象引用赋值给超类对象引用变量来实现动态方法调用 多态的三个前提条件: 多 ...
- Java入门篇(六)——类和对象
写到这里终于写到了入门篇的最后一个知识点了.类和对象是Java中经常被提到的两个词汇,实际上可以将类看作对象的载体,它定义了对象所具有的功能.Java是面向对象的语言,因此掌握类与对象是学习Java语 ...
- java面向对象基础(三):对象转型和多态
*/ .hljs { display: block; overflow-x: auto; padding: 0.5em; color: #333; background: #f8f8f8; } .hl ...
- Java学习——面对对象的思想入门
本文是看过<head first Java>之后的一点感悟,写点东西帮忙以后回忆,Java目前在我的工作中用到还不多,而我又对面对对象的编程非常的感兴趣.曾经在MFC平台上写过 ...
- Java入门笔记 03-面向对象(中)
介绍:这部分内容主要是介绍和总结封装.继承和多态. 一. 封装:把该隐藏的隐藏起来,把该暴露的暴露出来 封装是指将信息隐藏在对象内部,不允许外部程序直接访问对象内部信息,而是通过该类所提供的方法来实现 ...
- java基础课程笔记 static 主函数 静态工具类 classpath java文档注释 静态代码块 对象初始化过程 设计模式 继承 子父类中的函数 继承中的构造函数 对象转型 多态 封装 抽象类 final 接口 包 jar包
Static那些事儿 Static关键字 被static修饰的变量成为静态变量(类变量) 作用:是一个修饰符,用于修饰成员(成员变量,成员方法) 1.被static修饰后的成员变量只有一份 2.当成员 ...
- 18.Java 封装详解/多态详解/类对象转型详解
封装概述 简述 封装是面向对象的三大特征之一. 封装优点 提高代码的安全性. 提高代码的复用性. "高内聚":封装细节,便于修改内部代码,提高可维护性. "低耦合&quo ...
- JAVA 入门第二章 (面对对象)
本渣渣鸽了一个月终于有时间更新.因为有c++基础,学起来这章还是比较简单的,本章我觉得是程序猿质变课程,理解面向对象的思想,掌握面向对象的基本原则以及 Java 面向对象编程基本实现原理,熟练使用封装 ...
随机推荐
- 临时笔记 Protection
如果操作系统不使用处理器的多任务机制,它仍然需要为栈创建至少一个TSS 当程序通过调用门改变特权级的时候,处理器执行下面的步骤切换栈,并且执行被调用的程序在新的特权级 1. 使用目标代码段的DPL从T ...
- 洛谷 P3388 【模板】割点
题目背景 割点 题目描述 给出一个n个点,m条边的无向图,求图的割点. 输入输出格式 输入格式: 第一行输入n,m 下面m行每行输入x,y表示x到y有一条边 输出格式: 第一行输出割点个数 第二行按照 ...
- 编译压缩代码 MFCompress-src-1.01 :对‘***’未定义的引用
提示 MFCompressD.o:在函数‘main’中:MFCompressD.c:(.text.startup+0x34a): 警告: the use of `tempnam' is dangero ...
- 题解 洛谷P4550/BZOJ1426 【收集邮票】
这显然是一道概率的题目(废话) 设发\(f[i]\)表示买到第\(i\)张邮票还需要购买的期望次数,\(g[i]\)表示买到第\(i\)张邮票还需要期望花费的钱. 那么答案显然为\(g[0]\),我们 ...
- 【讲●解】火车进出栈类问题 & 卡特兰数应用
火车进出栈类问题详讲 & 卡特兰数应用 引题:火车进出栈问题 [题目大意] 给定 \(1\)~\(N\) 这\(N\)个整数和一个大小无限的栈,每个数都要进栈并出栈一次.如果进栈的顺序为 \( ...
- group by两个条件
学生表: 成绩表: 问题:统计各系各门课程的平均成绩 答案: select sdept,cno,AVG(grade)avg_grade from S join SC on S.sno = SC.sno ...
- Python之爬虫-酷6视频
Python之爬虫-酷6视频 #!/usr/bin/env python # -*- coding:utf-8 -*- import re import requests response = req ...
- (十四)Python3 字符串格式化
Python3 字符串格式化 字符串的格式化方法分为两种,分别为占位符(%)和format方式.占位符方式在Python2.x中用的比较广泛,随着Python3.x的使用越来越广,format方式使用 ...
- 设计方案--移动端延迟300ms的原因以及解决方案
一.前言 移动端浏览器提供一个特殊的功能:双击(double tap)缩放. 二.移动端延迟300ms的原因 为什么要用触摸事件?触摸事件是移动端浏览器特有的html5事件. 因为移动端的clic ...
- 使用HTML,CSS快速导出数据到Excel
在应用中经常会遇到要从系统或数据库中导出数据平面文件,一般是导出到txt,csv或excel.txt和csv一般用在系统间的数据交换, 而excel一般有较好的显示效果,可以按照一定的模板导出,导出就 ...