导入和扩展类有什么区别?

16

Java中导入类和扩展类之间有什么区别?


2
...或者你的意思是“implements”与“extends”之间的区别吗? - Stroboskop
10个回答

28

这是两个非常不同的概念。

导入一个类,是指在不需要在当前编写的类中限定完整名称的情况下,可以使用该类。

import java.util.Scanner
// now you can use the Scanner class in your code like so:
Scanner stdin = new Scanner(System.in);
// instead of having to do
java.util.Scanner stdin = new java.util.Scanner(System.in);

继承一个类是创建一个新的类,它是另一个类的子类。这将使您能够添加或更改正在扩展的类的功能。

// this is a very contrived example
public class EmptyList extends ArrayList {
    @Override
    public boolean add(Object o){
        return false; // will not add things to a list
    }
}

无法编译,必须添加返回 true 或 false 的 add 函数! - Tim Büthe
@Tim,为什么它无法编译?只是因为缺少返回值吗? - jjnguy
3
@Justin - 你可能需要澄清导入的意思是“您可以在当前类中不加限定符地使用该类”。您仍然可以在不导入它的情况下使用Scanner,只需在整个源代码中引用它为java.util.Scanner。对我来说,这是一个重要的观点;导入一个类并没有“做”什么,它仅仅是语法糖,使后续声明更简短。 - Andrzej Doyle
非常好的解释。最简单和最容易理解的解释。 - Deepak Rai

6
导入不会改变你的程序,它只允许你编写一个声明类的简短形式。在你自己的类中,你可以使用Java库中任何包中的任何其他类。
假设你想使用Scanner类从键盘输入。你可以直接写:Scanner sc = new Scanner(System.in);,而不用写java.util.Scanner sc = new java.util.Scanner(System.in);
如果你在类的顶部导入了包或者导入了类名后面跟着的包,如import java.util.*;import java.util.Scanner;
扩展一个类并不像导入一个类那么简单。当你扩展一个类时,你将扩展类的所有实例(字段)和方法添加到自己的类中。换句话说,你可以访问扩展类的所有字段和方法。

为什么要回答一个早已有好的、被接受的答案的老问题呢? - Dave Newton

4

当你在类中引用不和你的类在同一个包中的类时,你需要导入这个类。

当你想要使用面向对象编程的继承时,你需要扩展一个类——也就是说,你的类具有超类的功能以及你在其中编写的任何内容。

这两件事情是非常不同的,所以也许你应该创建一些简单的程序,亲身体验它们之间的明显区别。


4
导入意味着您可以以非限定方式引用它。例如:
import java.util.List;

List list = ...

相对于
java.util.List list =

扩展是完全不同的,它意味着从一个类继承行为和结构。


3

简单来说:

Import指的是“有一个”关系,使用关键字new

Extend指的是“是一个”关系,使用关键字extends

请参考此链接获取良好的示例。


1

扩展
扩展是增强现有类的功能。 导入
导入是使用一些API作为辅助工具来设计您的类。


1
首先,import 用于提高编译器查找正确类的效率。主要区别在于 import 使用聚合(has-a)概念,而在 extends 中我们使用(is-a)关系。
在 has-a 或 import 中,我们类的对象与导入的类没有维持生命周期关系,我们需要获取特定类的对象以在应用程序中使用。但是在 extends 中,我们类的对象与父类建立了生命周期关系... 如果我说得对,那就很开心,否则请指正...

1
导入一个类使我们能够访问其预定义的方法。我们无法更改这些方法,但可以使用它们。扩展一个类意味着我们可以重写在该类中定义的要继承的方法。

0

包导入只是告诉类加载器在哪里查找您的类,并区分具有相同名称的类的一种方式。类扩展告诉JVM您的类之间的层次关系。一旦找到类,面向对象规则就适用。


-4

Import是一个可选的子句,用于声明你的潜在类接口或枚举中将使用哪个类。Extend表示该类可以使用父类的功能。

要扩展公共类,您需要先导入它。


这几乎完全是错误的。你可以扩展一个类而不需要导入它。你可以使用一个类而不需要导入它,所以导入并不构成“意图声明”。扩展除了访问权限之外还有很多影响,只允许一个类访问父类的protected成员,并且在任何情况下都不需要使用父类的public功能。 - Andrzej Doyle
@Andrzej Doyle:我们可以说,可以通过添加整个路径而不使用导入关键字来扩展类。你对“意图声明”是正确的。换句话说,如果我写了这样的东西:“要扩展一个公共类,您应该导入它或使用完整路径”,那就是我的思维巨大的捷径。这种情况确实发生过;-)。 - Damian Leszczyński - Vash

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接