java中集合中自定义对象向下转型问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java中集合中自定义对象向下转型问题相关的知识,希望对你有一定的参考价值。

这段代码中,myAdd()和myGet()都是MyQueue自己的方法,调用Myadd()方法时,传入的元素是Object类型的,再调用myGet()方法获取这些元素时难道不需要这样么: MyQueue a = (MyQueue)myq
不需要这样进行向下转型么?为什么?
这是MyQueue类,下面还有个isNull()方法没写出来。

参考技术A 你的myq本身就是通过new出来的,为什么需要转形呢?这里不存在任何需要转型的要求呀!
如果需要转型,在你调用myGet方法得到容器中的内容时是有转型需求的,因为你的myAdd方法添加的是Object,取出后也会是一个Object对象,即放入时是通过向上转型过的,如果取出后不进行向下转型,那么取出的对象只能看作是一个Object对象。
例如:
MyQueue myq = new MyQueue();
//假设有一个类Student中有一个方法getName得到学生的姓名信息;
Student student = new Student();
student.setName("张三");
myq.add(student);
//下面的这一种方式是必须向下转型的
Student stu = (Student)myq.myGet();
//下面的这种方式是不需要向下转型的
Object stu1 = myq.myGet();
//因为放入的都是作为Object看待的,取出的也是Object,只有转型成相应的对象才能进行
//如getName的操作
stu.getName();
//stu1.getName();错本回答被提问者采纳

JAVA对象 向上转型upcasting,向下转型downcasting

1:向上转型

  向上转型,就是java多态中的父类引用指向子类对象。但要注意的是 父类引用不可以访问子类新增加的成员(熟悉和方法)

  代码举例:

/**
 * 定义一个父类
 */
public class Anaimal{

    private Long height;

    public Long getHeight() {
        return height;
    }

    public void setHeight(Long height) {
        this.height = height;
    }
    
}
/**
 * 下面的main方法可测 父类的引用指向子类的对象 
 * 向上转型 也就是多态
 */
public class Dog  extends Anaimal{
    
    private Long dogHeight;

    public Long getDogHeight() {
        return dogHeight;
    }


    public void setDogHeight(Long dogHeight) {
        this.dogHeight = dogHeight;
    }

    public static void main(String[] args) {
        //父类引用指向子类对象
        Anaimal an = new Dog();
        //只能访问父类的getHeight方法 不能访问子类的getDogHeight  因为Dog是当做anaimal用的 
        an.getHeight();
    }
    
}

以上 main()方法中 虽然an是指向Dog()的引用,但是an是当做Anaimal用的 所以看不到Dog独有的那部分

当然: 如果an想访问 Dog独有的对象,可以使用向下转型

 

    public static void main(String[] args) {
        //父类引用指向子类对象
        Anaimal an = new Dog();
        //只能访问父类的getHeight方法 不能访问子类的getDogHeight  因为Dog是当做anaimal用的 
        an.getHeight();
        //如果想访问Dog独有的方法,可以把 an向下转型成Dog
        //TODO 注意 如果是Anaimal an = new Anaimal(); an是转不成Dog的
        Dog an2 = (Dog)an;
        an2.getDogHeight();
    }

 

代码TODO 已经说明,使用向下转型的前提,是当前引用 指向的就是所需转型子类的对象。

否则会报错:java.lang.ClassCastException

 

以上是关于java中集合中自定义对象向下转型问题的主要内容,如果未能解决你的问题,请参考以下文章

JAVA对象 向上转型upcasting,向下转型downcasting

JavaSEJAVA对象向上转型和向下转型

Object类型转换成自定义类型(向下转型)

Java中自定义对象使用Collections工具类中的Sort方法

Java中自定义方法,如果无返回值,该如何调用呢?

Swift中自定义对象和自定义对象数组的通用属性[重复]