public class ObjectFoo {
private Object foo;
public void setFoo(Object foo){
this.foo = foo;
}
public Object getFoo(){
return foo;
}
}public class ObjectDemo {
public static void main(String[] args){
ObjectFoo foo1 = new ObjectFoo();
ObjectFoo foo2 = new ObjectFoo();

foo1.setFoo(new Boolean(true));
Boolean b = (Boolean)foo1.getFoo();
                                System.out.println(foo1.getFoo().getClass());
}
}
(一)书上说,foo1和foo2的getFoo()返回的是Object类型的实例。
我的理解是:这个"类型"指的是(在ObjectFoo中的)foo引用名称的类型,而"实例"指的是作为参数传入的Boolean的实     例,对吗?
(二)Object.getClass()返回的是Object的类而不是引用这个Object对象的引用名称类型,对吗?
我个人理解:如果返回的是引用名称的类型的话(就应该返回Object而不是Boolean了),这一步Boolean b =(Boolean)foo1.getFoo();怎么解释?返回都是Boolean类的,那还用Boolean来转换?那不是多此一举么?正因为返回的是,引用名称所引用对象创建时用的类,使得foo1.getFoo()返回的foo表面是Object实质是Boolean(这也与(一)的观点互相验证)所以在使用此对象时才要转为Boolean型!
(三)用父类与子类的关系,我可以这么理解上面着一段程序吗?
父类对象不能直接转为子类,不然会报错!但子类转为父类,父类又转为子类这是可行的!在这个前提下
由于new Boolean(true)创建了一个Boolean类得对象且所有类都继承于Object类,所以foo1.setFoo(new Boolean(true));相当于把父类类型引用指向了子类对象(把子类对象转为了父类)。
由于有了子类对象转为父类的这一步才使得Boolean b = (Boolean)foo1.getFoo();从父类又转为了子类这一步的成功!暂时想到这么多的,请各位前辈指教一下,我的理解对不!小弟不会表达,描述可能比较绕,多多谅解

解决方案 »

  1.   

    朋友你的东西看的我有点晕。
    你这个例子不叫泛型吧?只是一个父类,子类应用的例子,而且直接使用Object类型getFoo每次都需要类型转换,泛型本身就是不需要类型显示转换的东西了。
      

  2.   


    额,我知道这个与J2SE 5.0所提出的泛型<T>不需要转化,它解决了类型不同的安全问题!
    但书上说这个是之前版本中解决泛型问题的,只是它少了安全性而已...我看了以后有点不懂所以来求证一下
      

  3.   

    .javapublic class Pair<T> {

    private T first;

    public T getFirst() {
    return first;
    }
    public void setFirst(T first) {
    this.first = first;
    }
    public Pair(){

    }

    public Pair(T first,T second){
    this.first=first;
    }
    }.classpublic class Pair
    {    public Object getFirst()
        {
            return first;
        }    public void setFirst(Object first)
        {
            this.first = first;
        }    public Pair()
        {
        }    public Pair(Object first, Object second)
        {
            this.first = first;
        }    private Object first;
    }