美文网首页
面向对象3

面向对象3

作者: 科学旅行者 | 来源:发表于2016-11-24 09:28 被阅读10次

    参考资料:《Head First Java》

    首先是一组代码:

    import java.util.ArrayList;//导入ArrayList类;
    
    class Dog1 {//Dog1类;
        private String name;//成员变量;
        
        public void bark() {//成员方法;
            System.out.println("bark");
        }
    }
    
    public class ObjectTest {//测试主类;
        public static void main(String[] args) {
            ArrayList<Dog1> dList = new ArrayList<>();//保存Dog1的ArrayList;
            Dog1 d = new Dog1();//新建一个Dog1;
            dList.add(d);//装到ArrayList中;
            Dog1 ad = dList.get(0);//将Dog1赋值给新的Dog1引用变量;
            ad.bark();
        }
    }//结果输出bark;
    

    但如果是下面的情况:

    import java.util.ArrayList;
    
    class Dog1 {
        private String name;
        
        public void bark() {
            System.out.println("bark");
        }
    }
    
    public class ObjectTest {
        public static void main(String[] args) {
            ArrayList<Object> dList = new ArrayList<>();
            Dog1 d = new Dog1();
            dList.add(d);
            Dog1 ad = dList.get(0);
            ad.bark();
        }
    }//程序就会报错;
    //Type mismatch: cannot convert from Object to Dog1;
    

    我们知道在Java中的所有类都是从Object这个类继承出来,说白了,就是它是个“万用类”。
    然而,在使用Object的多态引用时会有一个问题,比如上面的ArrayList<Object>,可以存Dog1的对象,但是调用get()方法取出来的对象就是Object类型,此时编译器已无法确认它是Dog1,因此就会报错。

    任何从ArrayList<Object>取出的东西都会被当作Object类型的引用而不管它原来是什么。

    相关文章

      网友评论

          本文标题:面向对象3

          本文链接:https://www.haomeiwen.com/subject/oylbpttx.html