精华内容
下载资源
问答
  • java继承强转出现问题

    千次阅读 2018-11-09 17:51:21
    java继承强转出现问题 java的继承的时候可能会出现强转错误的问题。 父类的子类强转父类的时候需要让父类的对象指向子类对象。 先来看下代码: package MM; public class extends_problem { public static ...

                                           java继承强转出现问题

    java的继承的时候可能会出现强转错误的问题。

    父类的子类强转父类的时候需要让父类的对象指向子类对象。

    先来看下代码:

    package MM;
    
    public class extends_problem {
    	public static class parent{
    		public String name;
    		public parent(String name) {
    			this.name=name;
    		}
    	}
    	public static class child extends parent{
    		public int age;
    		public child(String name,int age) {
    			super(name);
    			this.age=age;
    		}
    	}
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		parent []p=new parent[3];
    		parent p1=new parent("das");
    		child c = new child("asd", 14);
    		child d=new child("lyc",21);
    		p[0]=c;
    		child c1=(child)p[0];
    	}
    
    }

    如果在最后面加上如下语句会出现报错:

    		child c2=(child)p1;

    父类的变量可以指向子类的引用,这是java允许的。但是父类的对象调用子类的方法(父类没有该方法)是报错的。

    以下是上面代码的总结

    子类的变量不能指向父类的引用。只能通过强转。被强转的父类必须是指向子类的引用,否则在编译的时候将会报错。

    • 只能在继承层次内进行类型转换
    • 在将超类转换为子类之前,应该用instanceof进行检查

     

    展开全文
  • java中子类强转父类,实际上依然是子类; 该引用只能调用父类中定义的方法和变量; 如果子类中重写了父类中的一个方法,那么在调用这个方法的时候,将会调用子类中的这个方法; Java 父类强转子 只有父类对象本身...

    Java 继承
    继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。

    Java 子类强转父类
    父类引用指向子类对象:
    java中子类强转父类,实际上依然是子类;
    该引用只能调用父类中定义的方法和变量;
    如果子类中重写了父类中的一个方法,那么在调用这个方法的时候,将会调用子类中的这个方法;

    Java 父类强转子类
    只有父类对象本身就是用子类new出来的时候, 才可以在将来被强制转换为子类对象.

    在DTO层与entity层分开时,DTO层继承entity,再给DTO层赋值时不能直接将entity转为dto,因为子类有些属性,父类没有,所以强转会出现错误。
    但是又需要这样强转,怎么办呢,如果手动的取出父类的属性依次填入,这样很耗时。

    解决方案是先把父类转jsonstring再把jsonstring转子类。剩余的子类值可以设定进去。这样两个类的重复值就不用重新设置值了。

    import com.alibaba.fastjson.JSONObject;
    
    public class test {
        
        public static void main(String[] args) {
            B b = new B();
            b.setB("1");
            String ob = JSONObject.toJSONString(b);
            A a = (A)JSONObject.parseObject(ob, A.class);
            a.setA("2");
            System.out.println(a.getA());
        }
    }
    
    class A extends B {
        private String a;
    
        public String getA() {
            return a;
        }
    
        public void setA(String a) {
            this.a = a;
        }
    }
    
    class B {
        private String b;
    
        public String getB() {
            return b;
        }
    
        public void setB(String b) {
            this.b = b;
        }
    }
    
    
    
    展开全文
  • 一句话解释java类型的强转

    千次阅读 2016-12-22 16:33:33
    很多人对java类型之间的转换,强转,那是傻傻分不清楚。 其实,对于它们之间的转换不难,需要明白转型的一个规律: 向下转型需要强转 那么什么是向下转型?简单的说,常见的说,就是父类转成子。父亲在上,...

    很多人对java类型之间的转换,强转,那是傻傻分不清楚。



    一、直接关系


    具有继承关系的类或接口。其实,对于它们之间的转换不难,需要明白转型的一个规律:


    向下转型需要强转


    那么什么是向下转型?简单的说,常见的说,就是父类转成子类。父亲在上,儿子在下,这叫做向下转型,如:

    Object obj = null;//java中所有类的老大,根
    
    String str = null;
    
    str = (String) obj;obj = str;
    


    那么为什么Object类型转成String需要强制转换?

    因为Object是java类型的根类,String 是继承自Object,是Object的子类。


    子类继承了父类的所有属性,所以子类转为父类,不需要强转;而父类可能不具备子类的所有属性,因此需要强制转换。


    这就好像:苹果肯定是果子,但果子不一定是苹果。如果想让某果子变成苹果,只好强制性称呼某个果子为“苹果”。

    这对于具有继承关系的接口和类之间同样适用。如:

    		ArrayList<String> aList = null;//ArrayList<E> implement List<E>
    		List<String> list = null;//List<E> extends Collection<E> 
    		Collection<String> colle = null;
    		
    		aList = (ArrayList<String>) list;//下←上,强转
    		aList = (ArrayList<String>) colle;//下←上,强转
    		list = (List<String>) colle;//下←上,强转
    		
    		list = aList; //父类←子类,上←下
    		colle = list;//父接口←子接口,上←下
    		colle = aList;//父接口←子类实现,上←下
    		



    换而言之,类型A具备类型B的所有属性,那么类型A本身就是类型B的一种,是不需要强制转成类型B的。而类型B不一定具备类型A的所有属性,所以转成类型A,需要强制转换。


    还是这个例子:苹果肯定是果子,但果子不一定是苹果。如果想让某果子变成苹果,只好强制性称呼某个果子为“苹果”。


    二、间接关系


    来看看java的基本类型,它们分别是:byte,char,short,int,long,float,double,boolean8个。除了boolean这个“异类”,基本不会遇到什么转换,那么其他类型之间怎么转换?


    java的基本类型的封装类,各自之间没有extends继承关系,但实现的接口存在关系,所以不能简单通过父类子类,向上向下来判断。

    我的总结就是,对基本类型而言,强转意味着“砍掉”部分内容,谁的精度高,范围广,转成精度低,范围小的就要强转。


    (1)整型和浮点型

    有点特殊,乍看之下,浮点型是一堆堆的小数,范围比整型大,整型应该在上,浮点型应该在下。然而,实际上,整数本来就是小数的一种:5=5.0啊,小数却不见得等于整数了:5.1=5?,不等滴。所以谁上谁下不是全部以类型的范围作为判断标准的,不适用。谁强转谁,更关键的地方在于其本身的属性。

    小数需要砍掉小数点,才变整数,所以说,这是一个强转的过程。而double的小数比float更多,所以,double转成float也需要砍,强转。


    double >>float >>int 强转。


    (2)字符型和字节型

    字符和字节占用的内存空间不同。char 占2,byte占1。char>>byte 强转。也是看谁多,砍谁。


    (3)整型之间

    long>>int >> short 强转,砍掉。







    展开全文
  • 构建继承类方法…点击查看 在Main中强制将父类转换为子 Student a = (Student) people; 编译器弹出错误信息 在Main中强制将子类转化为父类 People a=(People) student; System.out.prntln(a); 输出结果为 ...

    总结:
    父类不可以强转为子类
    父类中只存放共性抽象类方法,子类可以存放特性方法,所以子类

    首先构建好两个类
    构建继承类方法…点击查看
    在Main中强制将父类转换为子类

     Student a = (Student) people;
    

    编译器弹出错误信息
    在这里插入图片描述
    在Main中强制将子类转化为父类

    People a=(People) student;
    System.out.prntln(a);
    

    输出结果为
    在这里插入图片描述

    展开全文
  • java 对象之间的强转

    千次阅读 2019-02-28 09:06:37
    根据java多态,子类继承父类,子类可以强转为父类,说明子类就是父类,但是父类却不是子类,所以父类不能强转为子类 在继承关系中,如果一个实例的数据类型是某个子类,那它的数据类型也可以被看做是父类。但是,反...
  • java中,子类是不能直接转成父类的。如果直接强转就会出现ClassCastException。 public class ChongXie extends A{ public static void hello(){ System.out.println("chongxie"); } public static void main...
  • 定义A为父类,B、C为A的子类,以下为实例化方式 A a = new B(); A c = (A)new C(); 正确,但a,c都只能调用A父类中已存在的方法,若子类重写了父类的方法,在调用时...错误,C无法转换为B,二者没有实际关系 ...
  • java的强制转换

    2020-06-06 12:32:16
    本文介绍的是对的强制类型转换 我们知道子类是可以直接转化成父类的 例如: public class people { int age; String name; int sex; public void printInfo(){ System.out.println(this.age); System.out....
  • Java中的数组和List集合以及类型强转

    万次阅读 2018-04-19 19:01:29
    java中,集合操作有两种方式...也都知道其实泛型在到字节码层面上时,会被擦除,虽然字节码中还会保留泛型参数(可以利用反射看到),但对真实的的并不产生多大影响。 那么,对于List来说,如果泛型存在继承关...
  • 强转JAVA数组

    2017-11-12 15:45:00
    强转一个数组类型 必须要循环遍历 比如 B[] b; //A继承B; A[] a= (A[])b; 这样转是不能成功的 这是为什么?如何解决? 也就是说 for(inti=0;i<b.length;i++) { a[i]=(A)b[i]; } 这样转! 本文转自 ...
  • java中子类强转父类,实际上依然是子类; 该引用只能调用父类中定义的方法和变量; 如果子类中重写了父类中的一个方法,那么在调用这个方法的时候,将会调用子类中的这个方法; // A是父类,B是子类 A a = new A...
  • java 内存分配 http://blog.csdn.net/javaoverflow
  • 今天遇到一个BUG 在做调试的时候发现子类不能强转父类。。 DEBUG一下 发现 instanceof 结果是false 回想一下 在Oracle的时候驱动有两个版本 都是自定义加载器去加载驱动(为了区分Oracle版本) ...
  • 在运行下面这段代码时报了一个无法强转的错误Ljava.lang.Object; cannot be cast to [Ljava.lang.String;。 public class Demo { public static void main(String[] args) { ArrayList<String> ...
  • 彻底理解java父子之间的转换

    千次阅读 多人点赞 2018-12-27 18:15:18
    其实父类转换成子有两种方式,但是第一种方式没有多大的意义。第二种方式才是重点。 A): 第一种方式就是:强制转换。 (举例)即:Animal a = new Animal(); //Dog为子类,Animal为父类  Dog b = (Dog...
  • 父子相互强转

    2020-09-17 20:17:54
    父子相互强转 问题引入 先来看一段代码 public class Main { public static void main(String[] args) throws IOException { Father child = new Child(); child.setName("child"); System.out.println(child)...
  • Java继承和多态

    2019-11-16 18:30:02
    一.继承
  • 爷爷:Animal package com.Animal; public class Animal { private String color; private String feetNum; public String getColor() { return color; } public void setColor(String color) { this....
  • 抽象如何变为“实体”,这里所说的实体就是可以new出对象的,我知道只有一种方法,让一个普通类继承这个抽象,并实现抽象的抽象方法; 一个类继承一个抽象,当这个被abstract修饰时,它可以不用...
  • Java 和对象 1. 和对象是什么 可以理解成一个创造对象的模板,一切对象都需要从生成。比如盖房子时,建造图纸可以类比成一个,按照图纸建造的房子就是一个对象。按照图纸我们可以建造无数类似的房子,也...
  • } } 测试文件 import java.util.*; class HelloWord{ public static void main(String args[]) { Scanner scanner = new Scanner(System.in); animal animal = new animal(); System.out.println("请输入动物叫:")...
  • 一、java继承 1、构造函数的继承
  • 他的最新文章之一是有关Java的转换。 不幸的是,我觉得它错过了一个重要点:动态转换。 由于那是(非常) 相对较新的,因此本文将尽力填补这一空白。 不要使用投射 第一件事是避免铸造应该相对容易。 使用...
  • Java8中多了一个多类型强转,它是通过&来实现的; 比如我想要创建一个Comparator对象;并且希望它是可序列化的; Comparator seriComparator=(Comparator<Integer>&Serializable)(x1,x2)->{ return...
  • java 快速将A转化成B 导入pom依赖 <dependency> <groupId>net.sf.dozer</groupId> <artifactId>dozer</artifactId> <version>5.5.1</version> </dependency&...
  • 属性的继承 子类可以继承父类的非private属性。当子类试图访问父类的private属性时,静态检查会直接报错。
  • 面向对象的编程思想,通过将现实世界的个体种类抽象成(class),个体抽象成对象(object),个体与个体之间的关系抽象成继承(inheritance),让开发人员能够以符合正常思维的方式进行程序设计,提高了效率。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 16,175
精华内容 6,470
关键字:

java继承类强转

java 订阅