日期:2014-05-20  浏览次数:20843 次

帮忙分析这段代码的错误,arraylist类型转换问题
Java code
import java.util.ArrayList;

public class Vehicle { 
  
    public void run(){ 
         System.out.print("Vruum"); 
     } 
    public void stop(){ 
        System.out.print("stop!"); 
     } 
 } 
  
  
 class Car extends Vehicle{ 
  
     public void run(){ 
         System.out.print("Car vruum"); 
  
     } 
     public static void main (String... args){ 
         ArrayList<Vehicle> cars = new ArrayList<Car>(); 
         cars.run(); 
     } 
 } 


分析详细的分多 :)

------解决方案--------------------
ArrayList<Vehicle> cars = new ArrayList<Car>(); 
ArrayList<Vehicle>这个整体代表一个类型
ArrayList<Car>这个整体代表一个类型,

又继承关系的Vehicle和Car,而ArrayList<Vehicle>,ArrayList<Car>没又这层关系,所以类型不兼容,错误。

修改:
ArrayList<? extends Vehicle> cars = new ArrayList<Car>(); 
表示可以基类为Vehicle的所有类。
------解决方案--------------------
Java code

import java.util.ArrayList;

public class Vehicle { 
  
    public void run(){ 
         System.out.print("Vruum"); 
     } 
    public void stop(){ 
        System.out.print("stop!"); 
     } 
 } 
  
  
 class Car extends Vehicle{ 
  
     public void run(){ 
         System.out.print("Car vruum"); 
  
     } 
     public static void main (String... args){ 
         //还有,这句话不报错吗?我的jdk1.5
         ArrayList<Vehicle> cars = new ArrayList<Car>(); 

         //cars.run(); //这句话出错把,应该改为
          cars.add(new Car());
          cars.get(0).run();
     } 
 }