Java的“抽象”和“通用”代码之间的区别是什么?这两个意思是一样的吗?
答案 0 :(得分:6)
Abstract和Generics在Java语法和语义方面完全不同。
abstract是一个关键字,表示一个类不包含完整的实现,因此无法实例化。
示例:
abstract class MyClass {
public abstract void myMethod();
}
MyClass包含方法定义'public abstract void myMethod()',但没有指定实现 - 实现必须由子类提供,通常称为具体子类,因此抽象类定义了一个接口,也许有一些实施细节。
泛型的使用表明可以参数化类的各个方面。我发现最容易理解的例子是Java Collections API。
例如,List<String>
可以读作'String类型的对象列表'。 List<Integer>
与List接口相同,但只接受Integer类型的对象。
在Collections API中,它为集合提供了类型安全性,否则需要样板来检查类型并进行适当的转换。
答案 1 :(得分:5)
摘要 - 除了具体的现实,特定的对象, 或实际情况。
在Java中,您可以在类和方法定义中找到单词abstract。它意味着该类无法实例化(我只能用作超类),或者必须由子类覆盖该方法。一个例子是Animal类,Animal太模糊不能创建一个实例,但是Animal共享应该在Animal类中定义的公共属性/功能。
public abstract class Animal{
protected int calories;
public void feed(int calories){
weight += calories;
}
public abstract void move(); // All animals move, but all do not move the same way
// So, put the move implementation in the sub-class
}
public class Cow extends Animal{
public void move(){
// Some code to make the cow move ...
}
}
public class Application{
public static void main(String [] args){
//Animal animal = new Animal() <- this is not allowed
Animal cow = new Cow() // This is ok.
}
}
通用 - 适用于或引用a的所有成员 属,类,群或种类;一般
术语Generic或Generics在Java中用于明确声明某个容器对象中包含的对象类型。以ArrayList为例,我们可以将我们想要的任何对象放入ArrayList中,但是这很容易导致错误(你可能会意外地在你的ArrayList中填入一个填充了int的字符串)。泛型是用Java创建的,因此我们可以明确地告诉编译器我们只需要在ArrayList中使用int(使用泛型时,编译器会在您尝试将String放入整数ArrayList时抛出错误。)
public class Application{
public static void main(String [] args){
ArrayList noGenerics = new ArrayList();
ArrayList<Integer> generics = new ArrayList<Integer>();
nogenerics.add(1);
nogenerics.add("Hello"); // not what we want, but no error is thrown.
generics.add(1);
generics.add("Hello"); // error thrown in this case
int total;
for(int num : nogenerics)
total += num;
// We will get a run time error in the for loop when we come to the
// String, this run time error is avoided with generics.
}
}
答案 2 :(得分:3)
抽象代码表达了一个想法,但没有表达如何使其发挥作用
通用代码适用于多种对象,并知道您提供的对象
Abstract指定一个接口,没有完整的实现
示例:您可以使用抽象storeValue和getValue方法编写抽象Store类。然后,使用不同的数据库存储,磁盘存储,网络存储和内存存储实现扩展它。除了storeValue和getValue方法之外,所有方法都使用相同的方法。您可以互换使用它们。
通用代码包含类型信息,可以使用多种类型:
实施例: 你定义一个“添加”方法,它首尾相连地添加String(或类似)对象,或者对Number对象求和,或者将一种类型的元素添加到包含该类型的Collection中
答案 3 :(得分:2)
Abstract用于定义在被认为是“完整”之前需要额外定义功能的东西(或者在Java认证测试术语中具体)。泛型意味着它是一个可以处理实例化类时定义的各种数据类型的类。