interface jack{
 void dance();
   void basketball();
}class me implements tom,jack{
 public void sing(){
     System.out.println("i am singing");
 }
 public void football(){
     System.out.println("i am playing football");
 } 
 public void dance(){
     System.out.println("i am dancing");
 }
 public void basketball(){
     System.out.println("i am playing basketball");
 }  
}public class duotai{
  public static void main(String args[]){
        tom t=new me();
        jack j=(jack)t; //注释处;
        j.dance();
        j.basketball();
  }
}请问,注释处看不明白啊?我的理解是,tom是me的接口,然后tom的引用指向了me的对象,
me是子类,me同时又实现了jack的接口,然后这个我就不明白了,jack j=(jack)t;这个可以看做me直接向上转型,
为什么不可以直接写成jack j=t;而要强制转换?绕糊涂了啊...
直接写成jack j=t; 啊?

解决方案 »

  1. interface tom{
     void sing();
     void football();
    }interface jack{
     void dance();
       void basketball();
    }class me implements tom,jack{
     public void sing(){
         System.out.println("i am singing");
     }
     public void football(){
         System.out.println("i am playing football");
     } 
     public void dance(){
         System.out.println("i am dancing");
     }
     public void basketball(){
         System.out.println("i am playing basketball");
     }  
    }public class duotai{
      public static void main(String args[]){
            tom t=new me();
            jack j=(jack)t;
            j.dance();
            j.basketball();
      }
    }
      

  2. 1.tom,jack接口之间没有关系,变量就j,t分别是jack,tom类型,所以不能jack j=t
    2.变量t指向了me的对象,而me 同时实现了jack接口,所以可以强制类型转换成jack类型,
    jack j=(jack)t;这样是没问题的。
    表达能力不太好,不知道有没有解释清楚
      

类似问题 »