精华内容
下载资源
问答
  • Java向下转型的几种方法

    千次阅读 2019-02-25 17:25:36
    Java向下转型的几种方法 众说周知:Java可以自动向上转型,子对象赋值给父类型,直接可以操作。但是向下转型如何处理呢? 使用场景:对引用的sdk中的API类型进行二次封装,回调接口类型二次封装。说明:这里面的...

    Java向下转型的几种方法

    众说周知:Java可以自动向上转型,子对象赋值给父类型,直接可以操作。但是向下转型如何处理呢?

    使用场景:对引用的sdk中的API类型进行二次封装,回调接口类型二次封装。说明:这里面的接口不局限对应于Java中的interface,也可以是class。

    一、方法汇总:

    1. 静态代理

    优点:直观简单

    缺点:需要对使用的函数接口逐个复制编码

    2. 动态jdkProxy代理

    优点:jdk标准api,动态实现,不用对函数接口进行再次编码

    缺点:仅能代理Interface(传入实现Interface的类对象,但是代理的只能是Interface中的函数)

    3. 动态CGLibProxy代理

    原理:基于编译时继承原类动态插入实现

    优点:可以动态代理类,也不用对函数接口进行再次编码

    缺点:不能代理final方法(基于继承实现的),并且Android无法直接使用(github有改装工程)

    4. 动态运行时对象克隆代理

    原理:运行时动态拷贝对象构造新对象,一般基于继承进行拷贝

    优点:轻量跨平台,实现简单。

    缺点:如果采用继承的话,被代理的类也必须对外可见(否则编译报错)。

     

    二、示例演示

    。。。 稍后补充

     

     

    展开全文
  • //我是猫 4 } 下面正式讨论向下转型和向上转型: 自动向上转型: 1 //自动向上转型 2 AllAnimal a=newFish();3 a.speak(); //我是鱼 这里从编译器的角度,首先你要知道编译器是个"笨蛋"!它就认为a就是AllAnimal,...

    基础知识多态回顾:

    多态的三个必要条件:

    1.多态是方法的多态,不是属性的多态(多态与属性无关)。

    2.多态的存在有三个必要条件:继承、方法重写、父类引用指向子类对象。

    3.父类引用指向子类对象后,用该父类引用调用子类重写的方法,此时多态就出现了。

    详细举例:

    这里有继承,有方法重写,但是缺少父类引用指向子类对象。

    1 classAllAnimal{2 public voidspeak(){3 System.out.println("我们都是动物");4 }5 }6

    7 class Cat extendsAllAnimal{8 public voidspeak(){9 System.out.println("我是猫");10 }11 }12

    13 class Fish extendsAllAnimal{14 public voidspeak(){15 System.out.println("我是鱼");16 }17 public voidcanDo(){18 System.out.println("我会游泳");19 }20 }

    这样就产生了多态:父类引用指向子类对象。

    1 public static voidmain(String[] args){2 AllAnimal a=newCat();3 a.speak(); //我是猫

    4 }

    下面正式讨论向下转型和向上转型:

    自动向上转型:

    1 //自动向上转型

    2 AllAnimal a=newFish();3 a.speak(); //我是鱼

    这里从编译器的角度,首先你要知道编译器是个"笨蛋"!它就认为a就是AllAnimal,它首先会去AllAnimal类中找到speak()方法,发现有这个方法,则编译通过。(实际上a是指向的子类Cat)。

    向上转型的缺陷:

    AllAnimal a=newFish();

    a.canDo();//报错

    按照上面所说编译器认为a就是AllAnimal,那么首先会去AllAnimal中找canDo()方法,但是没有找打,这个方法是子类增加的新方法,编译则不通过。

    为了解决上述问题,引入强制向下转型:

    1 AllAnimal a=newFish();2 a.speak();3 //强制向下转型

    4 Fish a1=(Fish)a;5 a1.canDo();

    由此得到向下转型的意义:可以使用子类的新增方法了。

    原文:https://blog.csdn.net/qq_41877184/article/details/83052417

    原文:https://www.cnblogs.com/sunzhongyu008/p/11203444.html

    展开全文
  • 情况二:如果父类引用的对象是父类本身,那么在向下转型的过程中是不安全的,编译不会出错,但是运行时会出现java.lang.ClassCastException错误。它可以使用instanceof来避免出错此类错误。 public classDemo {...

    首先定义父类Animal,所有动物都有一个吃东西的方法;子类Dog还增加了一个叫的功能。

    public classAnimal {public voideat() {

    System.out.println("eat like an animal");

    }

    }

    public class Dog extendsAnimal {

    @Overridepublic voideat() {

    System.out.println("eat like an dog");

    }public voidbarking() {

    System.out.println("dog like barking");

    }

    }

    1、向上转型

    向上转型(upcasting):子类引用的对象转换为父类类型。

    向上转型转型时,父类指向子类引用对象会遗失除与父类对象共有的其他方法,也就是在转型过程中,子类的新方法都会遗失掉,在编译时,系统会提供找不到方法错误。

    public classDemo {public static voidmain(String[] args) {//upcasting

    Animal animal = newDog();

    animal.eat();//animal.barking(); The method barking() is undefined for the type Animal

    }

    }

    2、向下转型

    在向下转型过程中,分为两种情况:

    情况一:如果父类引用的对象的引用是指向的子类对象,那么在向下转型的过程中是安全的。也就是编译是不会出错误的。

    情况二:如果父类引用的对象是父类本身,那么在向下转型的过程中是不安全的,编译不会出错,但是运行时会出现java.lang.ClassCastException错误。它可以使用instanceof来避免出错此类错误。

    public classDemo {public static voidmain(String[] args) {

    Animal animal= newDog();//情况1

    Dog dog1 =(Dog) animal;

    dog1.eat();

    dog1.barking();//情况2

    Dog dog = (Dog) newAnimal();

    dog.eat();

    }

    }

    运行结果:

    eat like an dog

    dog like barking

    Exception in thread "main" java.lang.ClassCastException: demo.Animal cannot be cast to demo.Dog

    at demo.Demo.main(Demo.java:12)

    总结:

    1、 父类引用可以指向子类对象,子类引用不能指向父类对象。

    2、 向上转型不用强制转型。

    3、 向下转型要强制转型。

    4、 Upcasting会丢失子类特有方法,子类重写的父类方法有效。

    ————————————————

    版权声明:本文为CSDN博主「犁叔」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

    原文链接:https://blog.csdn.net/u012739535/article/details/45249853

    展开全文
  • java 内存分配 http://blog.csdn.net/javaoverflow

    java 内存分配  http://blog.csdn.net/javaoverflow/article/details/8874172

    http://blog.csdn.net/shimiso/article/details/8595564

    百度搜:java 内存分配

    下图仅供参考,不保证正确性




    Son son = new Son();  son是new出的对象,严格来说是对象的引用

    Father father=new Song();父类的引用指向子类("指向xxx" 是"指向 new 的对象",如new 的对象是子类,则指向子类,new 的对象是父类,则指向父类。下文中的“成员变量,静态方法看左边;非静态方法:编译看左边,运行看右边”这句话,左右中的“左”指等号左边对象的类型,右指等号右边new的对象)。

    创建的对象是父类的引用还是子类的引用怎么看?创建对象的类型为是什么,就称是什么的引用,如创建了对象son 而son的类型为Son,则说是Son的引用。



    多态问题1:有继承关系的父类和子类拥有相同变量或方法时,调用的是子类还是父类的变量或方法

    如链接问题:https://www.oschina.net/question/1175055_117310

    可以参考:http://blog.csdn.net/foreverhuylee/article/details/21278311 一句话:成员变量,静态方法看左边;非静态方法:编译看左边,运行看右边

    多态的条件:继承 + 重写 +父类的引用指向子类

    多态问题2:转型

    父类的引用操作子类,即向上转型(Father father = new Son()),好处是提高了扩展性,坏处是不能使用子类特有的方法。

    若想使用子类特有的方法可以向下转型(强转)即:

    Father father = new Son();

    father =(Son)father;

    注意:1 无论向上还是向下转型,最终都是子类对象做着变化--出自毕向东-多态_转型--节。此节父类是动物,子类是小狗,子类做变化的含义是自始至终都是小狗做变化,一会叫小狗,一会叫动物。

                 2 向下转型要做检查(父类本来指向狗强转为猫)


                      3 强转分为基本数据类型和引用数据类型两种情况。引用数据类型强转中上文讲了父类的引用指向子类的情况,如果不存在父子类引用,会异常(仅供参考)




    展开全文
  • 多态的向上转型: (1)本质:父类的引用指向了子类对象 (2)语法: 父类类型 引用名 = new 子类类型(); (3)特点(规则):编译类型看左边,运行类型看右边。 可以调用父类中的所有成员(遵守访问权限)(实际...
  • 一开始学习 Java 时不重视向下转型。一直搞不清楚向下转型的意义和用途,不清楚其实就是不会,那开发的过程肯定也想不到用向下转型。其实向上转型和向下转型都是很重要的,可能我们平时见向上转型多一点,向上转型也...
  • Java编程中经常碰到类型转换,对象类型转换主要包括向上转型和向下转型。向上转型我们在现实中常常这样说:这个人会唱歌。在这里,我们并不关心这个人是黑人还是白人,是成人还是小孩,也就是说我们更倾向于使用...
  • 有关向上造型和向下造型的核心精髓就是一句话:在创建实例的时候到底是子类的实例还是父类的实例。如果是子类的实例,则就完全可以进行强制类型转换。 向上造型 父类的引用指向子类的对象。实例化成子类,可用方法使...
  • java向下转型的作用

    2021-03-22 13:55:10
    这些属性在操作时所有的属性名称都使用 String 进行接收, 所有的属性内容使用 Object 进行接收,可以保存任意的对 象,在取得属性时要根据取得的类型进行向下转型操作......equals()——作用,对象的比较 ? 多态(难点) ...
  • Java向下转型的意义

    万次阅读 多人点赞 2016-08-17 16:13:01
    一开始学习 Java 时不重视向下转型。一直搞不清楚向下转型的意义和用途,不清楚其实就是不会,那开发的过程肯定也想不到用向下转型。其实向上转型和向下转型都是很重要的,可能我们平时见向上转型多一点,向上转型也...
  • java对象转型(向上转型和向下转型向下转型和向上转型是什么意思向上转型和向下转型的基本公式: 向下转型和向上转型是什么意思 基本数据类型,转换可以通过隐性和显性(强制)类型转换,例如float类型转成int类型...
  • 知识梳理一:向下转型1....// 报错这时就告诉我们向下转型不能自动转换,我们需要强转,所以向下转型又叫做强制类型转换.正确的转换语句为:Animal animal = new Dog();Dog dog = (Dog)animal;2.向下转型后...
  • Java向下转型的意义

    2021-03-08 10:30:12
    一开始学习 Java 时不重视向下转型。一直搞不清楚向下转型的意义和用途,不清楚其实就是不会,那开发的过程肯定也想不到用向下转型。其实向上转型和向下转型都是很重要的,可能我们平时见向上转型多一点,向上转型也...
  • 父类强转成子类会报异常,但是如果是向上转型后,再向下转型则不会报错,并且该对象能调用父类和子类全部的方法但只能调用在子类中重写的父类方法; Son son =(Son) new Father()会报异常,但Father father =new Son...
  • 我的处女作《Canvas系列教程》在我的Github上正在连载更新,希望能得到您...其他网上关于向上转型和向下转型并不能完全使读者透彻的了解,因此我决定重写一篇教程来让大家简单理解。 向上转型:将子类转化为父类。...
  • 1、向下转型需在满足向上转型前提下进行譬如:如下图所示代码中,父类Person及两个子类Chinese,French,子类中既有重写父类的方法,又有各自独立的方法。测试类中:先经过向上转型设置one指向Chinese,后由French...
  • 基础概念 向上转型就是子类对象被父类引用,例如动物和小鸟的关系,小鸟属于动物,动物不...这种方式就是向上转型,代码如下: class Animal { public void run() { System.out.println("父类的an...
  • Java对象类型转换:向上转型和向下转型 将一个类型强制转换成另一个类型的过程被称为类型转换。本节所说的对象类型转换,是指存在继承关系的对象,不是任意类型的对象。当对不存在继承关系的对象进行强制类型转换时...
  • JAVA中的向上转型和向下转型 今天在看廖雪峰老师的《JAVA教程》时看到了java中的向上转型和向下转型,看完之后没有理解也不太明白,又陆续查询了一些资料来学习。后来看到两位博主写的很形象,容易理解,总结在这里...
  • Java向下转型的条件判断

    千次阅读 2019-05-06 18:46:43
    //抽象类:不允许实例化,可以通过向上转型,指向子类实例 public abstract class Animal { //属性:昵称、年龄 private String name; private int month; public Animal(){ } public ...
  • 关于Java继承的 向上转型和向下转型

    千次阅读 2016-03-25 19:58:47
    Java中, 向上转型(upcasting)和向下转型(downcasting)的前提,必须是有“继承关系”,向上转型是自动的,向下转型需要进行强转。例如:/**定义了一个“父”类*/ public class Father { /**姓名*/ private ...
  • 在学习Java编程中,最头疼事情之一就是数据类型转换。有时候它在不经意之间就完成了(自动类型转换),有时候却又要求我们手动指定(强制类型转换)。基本数据类型,转换规则还可以通过类型本身空间大小和精度分析...
  • Java向上转型和向下转型的区别

    千次阅读 2020-01-15 13:29:27
    向下转型:通过引用类型强转,恢复了子类的成员变量以及方法。 1.代码实现: 可以发现,父类虽然指向了子类的实例对象,但是并不能调用子类对象的方法,编译器报错。此时我们可以看作被隐藏了,那么怎样才可以把...
  • Java向下转型实例

    2017-03-28 19:19:27
    一开始学习 Java 时不重视向下转型。一直搞不清楚向下转型的意义和用途,不清楚其实就是不会,那开发的过程肯定也想不到用向下转型。 其实向上转型和向下转型都是很重要的,可能我们平时见向上转型多一点,向上...
  • 简介:CSDN博客专家,从事软件开发多年,精通Java、JavaScript,博主也是从零开始一步步把学习成长、深知学习和积累的重要性,喜欢跟广大ADC一起打野升级,欢迎您关注,期待与您一起学习、成长、起飞! 引言 很多...
  • 1.Java中的多态:指的是它的可以有多种形态的一种特性,只是一种它属性上的名词描述   ps:多态性中,例如方法的重载、覆写,向上转型等都是组成多态性的成分之一;但好像大部分人默认将类似A a = new B;(B继承于A...
  • 原因:其实这个错误不太明确,真正导致上面的强转发生异常的原因是,new ArrayList()创建的时候,有一个默认的初始长度,这个默认值是10;所以在toArray()创建新的数组的时候,会按照这个长度创建,但是其实longList...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,657
精华内容 1,862
关键字:

java向下转型除了强转还有其他方式吗

java 订阅
友情链接: yizi.rar