是懒得回答还是也像我不清楚呢?

解决方案 »

  1.   

    虽然上溯为父类对象了,但自己的特征(属性和方法)并没有消失,所以不能随意转化成其他不同的派生类比如我们规定动物这个类,它有跑、跳、吃、叫四个特征
    再定义一个黄狗类,它继承并覆盖了动物的跑、跳、吃、叫四个特征,并且还扩展出自己的属性--黄毛
    我们看到一条具体的黄狗时,我们可以说这是一条狗,也可以说这是一只动物
    但无论我们用什么概念去称呼它,在我们面前的“黄狗”这个实质没有任何变化
    不会因为我们说它是动物,它的“黄毛”这个属性就消失了,“狗叫”这个方法就还原成了动物类中定义的“动物叫”
    所以如果这时我们让眼前这只上溯回动物概念的事物发出叫声的话,得到的结果仍然会是狗叫声因此,如果我们强制这个“黄狗”的实质在被回溯到动物层后再转换成猫类动物,并且还想让它发出猫叫声,这显然是不可能的,是非法的
    也许可以这样理解:
    我们把一个具体的派生类对象上溯成基类时,其实只是从概念的层次上去约束了它应该暴露的属性和方法等特征。
    最后用一个示例程序说明:
    package com.zcjl.test;
    public class TestClass {    public static void main(String[] args) {
            Object obj1 = new String("A String Object");
            System.out.println(obj1.toString());        Object obj2 = new TestClass();
            System.out.println(obj2.toString());        //System.out.println((String) obj2); // 非法,因为TestClass和String虽然同样继承自Object,但却不是String类及其派生类的实例
            //System.out.println(obj2.show()); // 非法,因为Object类没有定义show()方法        System.out.println((obj1 instanceof String));
            System.out.println((obj2 instanceof TestClass));
        }    public String toString() {
            return "A TestClass Object";
        }    public String show() {
            return "TestClass.show()";
        }
    }执行的结果是:
    A String Object
    A TestClass Object
    true
    true