Java 创建实现接口的所有类的向量
我有一个接口“Vehicle”和实现该接口的类Car、Bicycle、Bike等 我可以创建接口的向量并为其分配实现类的实例吗? 例如: 向量vi; vi.添加(0,新车()); vi.增加(1,新自行车()); 等等Java 创建实现接口的所有类的向量,java,interface,Java,Interface,我有一个接口“Vehicle”和实现该接口的类Car、Bicycle、Bike等 我可以创建接口的向量并为其分配实现类的实例吗? 例如: 向量vi; vi.添加(0,新车()); vi.增加(1,新自行车()); 等等 所以在运行时,我可以简单地检查索引并调用所需的函数?当然可以。这是在运行时使用多态性的一个经典示例 import java.util.Vector; interface Vehicle { public int getNumberOfWheels(); } clas
所以在运行时,我可以简单地检查索引并调用所需的函数?当然可以。这是在运行时使用多态性的一个经典示例
import java.util.Vector;
interface Vehicle {
public int getNumberOfWheels();
}
class Car implements Vehicle {
final int numberOfWheels = 4;
public int getNumberOfWheels() {
return numberOfWheels;
}
}
class Bicycle implements Vehicle {
final int numberOfWheels = 2;
public int getNumberOfWheels() {
return numberOfWheels;
}
}
public class Program {
public static void main(String args[]) {
Vector<Vehicle> vi = new Vector<Vehicle>();
vi.add(0, new Car());
vi.add(1, new Bicycle());
for(Vehicle v: vi) {
System.out.println(v.getClass().getName()
+ " has " + v.getNumberOfWheels() + " wheels");
}
}
}
import java.util.Vector;
接口车辆{
public int getNumberOfWheels();
}
汽车类工具车{
最终整数车轮数=4;
public int getNumberOfWheels(){
返回轮数;
}
}
自行车类工具车{
最终整数车轮数=2;
public int getNumberOfWheels(){
返回轮数;
}
}
公共课程{
公共静态void main(字符串参数[]){
向量vi=新向量();
vi.添加(0,新车());
vi.增加(1,新自行车());
车辆(v:vi){
System.out.println(v.getClass().getName())
+“具有”+v.getNumberOfWheels()+“wheels”);
}
}
}
当然可以。这是在运行时使用多态性的一个经典示例
import java.util.Vector;
interface Vehicle {
public int getNumberOfWheels();
}
class Car implements Vehicle {
final int numberOfWheels = 4;
public int getNumberOfWheels() {
return numberOfWheels;
}
}
class Bicycle implements Vehicle {
final int numberOfWheels = 2;
public int getNumberOfWheels() {
return numberOfWheels;
}
}
public class Program {
public static void main(String args[]) {
Vector<Vehicle> vi = new Vector<Vehicle>();
vi.add(0, new Car());
vi.add(1, new Bicycle());
for(Vehicle v: vi) {
System.out.println(v.getClass().getName()
+ " has " + v.getNumberOfWheels() + " wheels");
}
}
}
import java.util.Vector;
接口车辆{
public int getNumberOfWheels();
}
汽车类工具车{
最终整数车轮数=4;
public int getNumberOfWheels(){
返回轮数;
}
}
自行车类工具车{
最终整数车轮数=2;
public int getNumberOfWheels(){
返回轮数;
}
}
公共课程{
公共静态void main(字符串参数[]){
向量vi=新向量();
vi.添加(0,新车());
vi.增加(1,新自行车());
车辆(v:vi){
System.out.println(v.getClass().getName())
+“具有”+v.getNumberOfWheels()+“wheels”);
}
}
}
是的,你可以这样做。接口就是这样使用的 现在建议更好的方法:很难做到,因为不太清楚你到底需要做什么。第一个建议是使用ArrayList而不是Vector。两者之间的主要区别在于向量是“同步的”,这意味着线程安全。但是,同步对性能有很大影响,Vector类通过同步对其所有方法的访问来实现全线程安全。通常最好使用非同步容器,如果需要线程安全,最好在容器外部管理您自己的同步,因为您可以根据使用情况将它们放在需要的地方 在极端情况下,如果您的列表具有预先已知的固定大小,您甚至可以使用一个简单数组,即:
Vehicle[] vi = new Vehicle[2];
vi[0] = new Car();
vi[1] = new Bicycle();
是的,你能做到。接口就是这样使用的 现在建议更好的方法:很难做到,因为不太清楚你到底需要做什么。第一个建议是使用ArrayList而不是Vector。两者之间的主要区别在于向量是“同步的”,这意味着线程安全。但是,同步对性能有很大影响,Vector类通过同步对其所有方法的访问来实现全线程安全。通常最好使用非同步容器,如果需要线程安全,最好在容器外部管理您自己的同步,因为您可以根据使用情况将它们放在需要的地方 在极端情况下,如果您的列表具有预先已知的固定大小,您甚至可以使用一个简单数组,即:
Vehicle[] vi = new Vehicle[2];
vi[0] = new Car();
vi[1] = new Bicycle();
请建议其他更好的方法。您尝试过实现您的解决方案吗?我尝试过这样实现:Vector vi=new Vector();vi.添加(0,新自行车());但是,eclipse抛出了以下错误:这一行有多个标记-标记上的语法错误,错误的构造-标记上的语法错误“”,删除此标记-标记上的语法错误,删除这些标记使用
ArrayList
,Vector
是一个具有奇怪,添加了几乎无用的同步语义。@user1071840,这是否有效?如果没有,问题是什么?请建议其他更好的方法。您是否尝试过实现您的解决方案?我尝试过这样实现:Vector vi=new Vector();vi.添加(0,新自行车());但是,eclipse抛出了以下错误:这一行有多个标记-标记上的语法错误,错误的构造-标记上的语法错误“”,删除此标记-标记上的语法错误,删除这些标记使用ArrayList
,Vector
是一个具有奇怪,添加了几乎无用的同步语义。@user1071840,这是否有效?如果没有,问题是什么?