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 面向对象编程基本实现原理,熟练使用封装 ...
随机推荐
- JAVA 学习笔记 - 反射机制
1. JAVA反射机制的概念 2. 怎样实例化一个 Class对象 Class.forName(包名.类名); 对象.getClass(); 类.class; ================== ...
- java调用jacob生成pdf,word,excel横向
/* * 传进一个office文件的byte[]以及后缀,生成一个pdf文件的byte[] */ public byte[] jacob_Office2Pdf(byte[] srcFileBytes, ...
- 梅沙教育APP简单分析-版本:iOS v1.2.21-Nathaneko-佳钦
梅沙教育APP简单分析 时间:2017年6月6日 版本:iOS v1.2.21 分析人:Nathaneko-佳钦 备注:仅仅是个人一些简单的分析与见解,非正式产品分析报告,未体验购买相关功能,可能存在 ...
- tab切换组件nz-tab
<nz-card [nzBordered]="true" nzTitle="卡片标题"> <nz-card style="width ...
- pom.xml配置引用项目时不生效
1 在项目pom.xml配置中引用项目A,但是编译时,取提数引起是B: 2 原因是:[Java Build Path - Projects] 引用的还是老的项目B,删除该引用即可解决.
- pep8摘要
https://www.python.org/dev/peps/pep-0008/ #!/usr/bin/python # -*- coding:utf- -*- # @filename: pep_s ...
- spring封装的RabbitMQ
spring这么牛逼的团队,封装了RabbitMQ,简化了RabbitMQ的使用,那肯定是要使用spring-rabbit了 一.简介 二.使用方法 1.消费者 public class Foo { ...
- [Python3网络爬虫开发实战] 6.2-Ajax分析方法
这里还以前面的微博为例,我们知道拖动刷新的内容由Ajax加载,而且页面的URL没有变化,那么应该到哪里去查看这些Ajax请求呢? 1. 查看请求 这里还需要借助浏览器的开发者工具,下面以Chrome浏 ...
- centos7搭建安装sentry
Sentry 是一款基于 Django实现的错误日志收集和聚合的平台,它是 Python 实现的,但是其日志监控功能却不局限于python,对诸如 Node.js, php,ruby, C#,java ...
- Windows系列原版系统镜像下载
原版系统镜像下载 Windows 10 系统 Windows 10 企业版 1511版 (64位) Windows 10 Enterprise, Version 1511 (x64) – DVD (C ...