What is the point of downcast? 当一个方法只有子类才有,马克-to-win:不是说基类和子类都有,开始时又是基类指针指向派生类,这时就需要downcast, see the following example. after you cast with SubClass,sc is pure SubClass type. 例1.9.1--- class SuperClassM_t_w {     int a;     SuperClassM_t_w() {      …
1.父类对象可以强制转换为子类对象,但是前提是此父类对象为子类对象实例化的结果. e.g. Fruit fruit=new Apple(); Apple a=(Apple)fruit;//ok e.g. 假设Apple类继承于Fruit类, Object fruit=new Fruit(); Object apple=(Apple)fruit;//wrong 2.子类的实例向父类转型是为了实现多态.…
[参考资料]马克-to-win java中多态polymorphism,向上转型和动态方法调度有什么用? java中什么叫多态,动态方法调度(dynamic method dispatch)? java中downcast向下转型到底有什么用? 举例说明! java中如何使用派生类指针指向基类,即downcast向下转型?举例! [我的记忆点] √ Upcast: 父类指针→子类对象(只能调用 父类方法.子类override的方法.不能调用子类only方法) √ Downcast:子类指针→(子类…
目录 Java多态之向下转型 强制类型转换 instanceof Java多态之向下转型 往期回顾:我们学习了向上转型和动态绑定的概念,可以知道在继承关系中,将一个子类对象赋值给父类的引用变量,调用父类的方法,在实际运行时,就可以根据子类中重写的方法执行不同的操作.其中有一个弊端,就是在向上转型的过程中,其实丢失了一部分子类特有的功能,毕竟它只允许调用父类中的方法.那么,如何在这时调用子类中的方法呢,这时就需要与向上转型相对应的方法,就是所谓的:向下转型. 向上转型是自动就能完成的,向下转型则需…
摘要:NIO即New IO,这个库是在JDK1.4中才引入的.NIO和IO有相同的作用和目的,但实现方式不同,NIO主要用到的是块,所以NIO的效率要比IO高很多. 本文分享自华为云社区<java中的NIO和IO到底是什么区别?20个问题告诉你答案[奔跑吧!JAVA]>,原文作者:breakDraw . NIO即New IO,这个库是在JDK1.4中才引入的.NIO和IO有相同的作用和目的,但实现方式不同,NIO主要用到的是块,所以NIO的效率要比IO高很多. Q: NIO和标准IO有什么区别…
在对Java学习的过程中,对于转型这种操作比较迷茫,特总结出了此文.例子参考了<Java编程思想>. 目录 几个同义词 向上转型与向下转型 例一:向上转型,调用指定的父类方法 例二:向上转型,动态绑定 例三:向上转型,静态绑定 例四:向下转型 转型的误区 1.运行信息(RTTI) 2.数组类型 3.Java容器 几个同义词 首先是几组同义词.它们出现在不同的书籍上,这是造成理解混淆的原因之一. 父类/超类/基类 子类/导出类/继承类/派生类 静态绑定/前期绑定 动态绑定/后期绑定/运行时绑定…
发现一篇对接口总结很精简的文章 1.在java中接口就是一个完全抽象的类,跟抽象类一样不能产生对象,但是可以作为对象的引用,可以由其实现类向上转型,它就跟超类一样, 向上转型了,可以很好的利用接口,可以调用接口中的所有在实现接口类中的方法.而不能把引用指向,接口(或者超类)中没有的方法, 2.接口定义中默认的都是public abstract的方法 当实现接口的时候方法必须是public 并前要实现接口中出现的所有方法. 例如: public interface A { void fun();/…
向上转型 将子类对象当作父类对象     子类对象------>父类对象 先实例化子类 父类 父类对象 = 子类实例 package test2; class Father{ public void fun1(){ System.out.println("A---------fun 1"); } public void fun2(){ this.fun1();; } } class Sun extends Father{ public void fun1(){ System.ou…
首先,编写一个死锁程序 package deadlock; public class testJstack { final static Object resource_1 = new Object(); final static Object resource_2 = new Object(); public static void main(String[] args) { Thread t1 = new Thread("t1") { public void run() { syn…
1. 定义 如果B类是A类的子类或间接子类,当用B类创建对象b并将这个对象b的引用赋给A类对象a时,如: A a;a = new B();ORA a;B b = new B();a = b; 则称A类对象a是子类B对象b的上转型对象. 2. 性质 对象b的上转型a的实体是有子类B创建的,但是上转型对象会失去子类B的一些属性和功能.上转型对象具有以下特点: 上转型对象不能操作子类新增加的成员变量,不能使用子类新增的方法.即为较子类B失去一些属性和功能,这些属性和功能是新增的. 上转型对象可以操作子…
继承条件下构造方法的调用规则如下: 情况1:如果子类的构造方法中没有通过super显式调用父类的有参构造方法,也没有通过this显式调用自身的其他构造方法,则系统会默认先调用父类的无参构造方法.在这种情况下,写不写“super();”语句,效果是一样的. 情况2:如果子类的构造方法中通过super显式调用父类的有参构造方法,那将执行父类相应构造方法,而不执行父类无参构造方法. 情况3:如果子类的构造方法中通过this显式调用自身的其他构造方法,在相应构造方法中应用以上两条规则. 特别注意的是,如…
public static final char UNDERLINE = '_'; /** * 驼峰格式字符串转换为下划线格式字符串 * * @param param * @return */ public static String camelToUnderline(String param) { if (param == null || "".equals(param.trim())) { return ""; } int len = param.length(…
基类指针指向派生类,我们已经很熟了.假如我们想用派生类反过来指向基类,就需要有两个要求:1)马克-to-win:基类指针开始时指向派生类,2)我们还需要清清楚楚的转型一下. if you want to use derived class pointerpoint to base class, there are two requirements:1) base class pointer is initially the type of the derived class like Anima…
参考地址:http://www.cnblogs.com/think-in-java/p/5527389.html 参考地址:https://blog.csdn.net/scyatcs/article/details/16887807 参考地址:https://blog.csdn.net/wangyang1354/article/details/52290461…
RTTI可以帮助我们在运行时识别对象和类的信息. 一般传统的RTTI有三种实现方式: 1. 向上转型或向下转型(upcasting and downcasting),在java中,向下转型(父类转成子类)需要强制类型转换2. Class对象(用了Class对象,不代表就是反射,如果只是用Class对象cast成指定的类,那就还是传统的RTTI)3. instanceof或isInstance() 通过Class对象实现RTTI interface HasBatteries{} interface…
前言 今天重读了一下向上转型与向下转型,有些新的体会,了解了向上转型的好处,及如何向下转型.在此分享给大家. 向上转型 向上转型是用来表现新类和基类之间的关系.在传统中,由导出类转型成基类,在继承图中是向上移动的.因此称作向上转型.由于向上转型是从一个较专用类型向较通用类型转换,所以总是安全的.也就是说,导出类是基类的一个超集.它可能比基类含有更多的方法.但他必须具备基类中所含有的方法. 我们来看一个例子. class Car { public void run() { System.out.p…
在项目中,我们使用IronPython来定义工作流脚本来以应对科研多变的需求.项目使用的主要语言仍然是C#,使用C#封装了各种基础服务与基础设施.Python脚本只使用C#提供的服务,或者说只定义了逻辑流程,一切实际操作都有C#来操刀.一切工作良好,但在工程师(engineer)脚本[1]中,我们需要直接对具体硬件定义逻辑流程.这些流程可以用来测试硬件的可连接性与功能正确性,也可以用来对硬件做压力测试. 按正常思维来说,脚本不应该访问物理硬件的Api.的确,我们在C#中已经提供了良好的抽象硬件接…
                                            Java向上转型和向下转型(附具体样例) 熬夜整理的关于Java向上和向下转型的样例,很的通俗易懂哦~~~~ 一.向上转型 package com.sheepmu; class Animal { public void eat() { System.out.println("父类的 eating..."); } } class Bird extends Animal { @Override publ…
什么是多态 多态是一个对象的多种实现,是建立在继承的基础上的,即对象“人”,有老师和学生不同的实现,其实总结起来就是允许将子类类型的指针赋值给父类类型的指针. 多态的发生条件 多态发生的前提是:1. 要有继承发生: 2. 要有方法的重写: 3. 要有父类引用指向子类对象. 多态中成员的访问特点 一个类中有成员变量,构造方法,成员方法和静态方法,那在多态中这些成员的访问特点是如何的呢,下面通过代码来总结下. /** * Created by lili on 15/10/21. */ class P…
在具体介绍C++中的四种转型操作符之前,我们先来说说旧式转型的缺点: ①它差点儿同意将不论什么类型转换为不论什么其它类型,这是十分拙劣的.假设每次转型都可以更精确地指明意图,则更好. ②旧式转型难以辨识.旧式转型的语法结构是由一对小括号加上一个对象名称组成.而小括号和对象名称在C++的不论什么地方都有可能被使用. 为解决C旧式转型的缺点,C++导入了4个新的转型操作符:static_cast.const_cast.dynamic_cast.reinterpret_cast. 以下我来一一分析这四…
在Java中native是关键字.它一般在本地声明,异地用C和C++来实现.它的声明有几点要注意:1)native与访问控制符前后的关系不受限制.2)必须在返回类型之前.3)它一般为非抽象类方法.4)native方法在异地实现,象抽象方法一样,所以没有方法体,以分号结束.如下列5种声明: native public void f();                         正确. private native void f();                        正确. p…
多态的概念: 简单来说就是事物在运行过程中存在的不同状态,即父类或接口定义的引用变量指向子类或具体实现类的实例对象.程序调用方法在运行期才进行动态绑定,而不是引用变量的类型中定义的方法. 多态存在的前提: 1.存在继承关系,子类继承父类: 2.子类重写父类的方法: 3.父类引用指向子类对象. 具体实例: 1.定义一个父类:Animal package demo; class Animal{ int num = 10; static int age = 20; public void eat()…
首先要明白一点向上转型和向下转型他们都是建立在继承的基础上. 一.向上转型 子类到父类的转换通常称作向上转型,通俗的说就是定义父类对象指向子类对象. 下面通过一个例子来深入理解向上转型. //定义一个抽象的动物父类 public abstract class Animal { public abstract void Play();//此处需注意抽象方法没有方法体 } //定义一个狗狗类,继承自Animal public class Dog extends Animal { //重写父类的Pla…
在对Java学习的过程中,对于转型这种操作比较迷茫,特总结出了此文.例子参考了<Java编程思想>. 目录 几个同义词 向上转型与向下转型 例一:向上转型,调用指定的父类方法 例二:向上转型,动态绑定 例三:向上转型,静态绑定 例四:向下转型 转型的误区 1.运行信息(RTTI) 2.数组类型 3.Java容器 几个同义词 首先是几组同义词.它们出现在不同的书籍上,这是造成理解混淆的原因之一. 父类/超类/基类 子类/导出类/继承类/派生类 静态绑定/前期绑定 动态绑定/后期绑定/运行时绑定…
貌似一个简单的问题(也许还真是简单的)但是却把曾经自认为弄清楚的我弄得莫名其妙 char在Java中应该是16个字节byte在Java中应该是8个字节char x = '编'; //这样是合法的,输出也是16个字节 但是String str = "编";byte[] bytes = str.getBytes(); //我想不明白,为什么这里要占用3个byte呢?3个byte一共是3*8=24个字节,那么char x怎么又放得下?我坚信char是16个字节,但是str.getBytes(…
//父类 四边形 class Quadrangle{ public static void draw (Quadrangle q){ } } //子类  public class Parallelogram extends Quadrangle{ public static void main(String args[]){ Parallelogram  p=new Parallelogram (); //这就是向上转型 draw(p) } } //子类 public class Paralle…
5.13.1 向上转型 我们在现实中常常这样说:这个人会唱歌.在这里,我们并不关心这个人是黑人还是白人,是成人还是小孩,也就是说我们更倾向于使用抽象概念“人”.再例如,麻雀是鸟类的一种(鸟类的子类),而鸟类则是动物中的一种(动物的子类).我们现实中也经常这样说:麻雀是鸟.这两种说法实际上就是所谓的向上转型,通俗地说就是子类转型成父类.这也符合Java提倡的面向抽象编程思想.来看下面的代码: package a.b; public class A { public void a1() { Syst…
1.父类引用可以指向子类对象,子类引用不能指向父类对象. 2.向上转型:子类引用的对象转换为父类类型称为向上转型,把子类对象直接赋给父类引用叫upcasting,向上转型不用强制转型(类似于低精度赋给高精度不用强制转换). 如: Father a = new Son(); 相当于 Son s= new Son(); Father f=s; 注意:向上转型时,只能调用父类的成员方法,如果子类重写了父类的方法就根据这个引用指向调用子类重写的这个方法(这个方法就是覆盖override).这个调用过程就…
在Java编程中经常碰到类型转换,对象类型转换主要包括向上转型和向下转型. 5.13.1 向上转型 我们在现实中常常这样说:这个人会唱歌.在这里,我们并不关心这个人是黑人还是白人,是成人还是小孩,也就是说我们更倾向于使用抽象概念"人".再例如,麻雀是鸟类的一种(鸟类的子类),而鸟类则是动物中的一种(动物的子类).我们现实中也经常这样说:麻雀是鸟.这两种说法实际上就是所谓的向上转型,通俗地说就是子类转型成父类.这也符合Java提倡的面向抽象编程思想.来看下面的代码: package a.…
今天做了一个测试的题目,发现自己还是很多问题没有静下心来做.很多问题是可以自己解决的但是自己一是没有读清题意,二是自己心里太急躁了.所以这个要自己应以为鉴! 对象的转型问题其实并不复杂,我们记住一句话:"父类引用指向子类对象". java中对象的转型分为向上转型和向下转型 一.对象的向上转型 1.1.定义 子类引用的对象转换为父类类型称为向上转型.通俗地说就是是将子类对象转为父类对象.此处父类对象可以是接口 1.2.解释 比如说我有两个类,一个是父类Animal,另一个是Bird类为子…