Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如果使用导入而不是相同的包,则会发生更改_Java_Import_Package - Fatal编程技术网

Java 如果使用导入而不是相同的包,则会发生更改

Java 如果使用导入而不是相同的包,则会发生更改,java,import,package,Java,Import,Package,今天我写了一个考试,有一个问题,如果我们写import countries.*,哪些代码行行不通而不是包装国家在TestCountry类中。以下是两个类: package countries; public class Country { private String name; private int population; boolean isEuropean; public double area; protected Country[] neig

今天我写了一个考试,有一个问题,如果我们写
import countries.*,哪些代码行行不通而不是
包装国家
TestCountry
类中。以下是两个类:

package countries;

public class Country {
    private String name;
    private int population;
    boolean isEuropean;
    public double area;
    protected Country[] neighbors;

    protected boolean inEurope() {
        return this.isEuropean;
    }

    private void updatePopulation(int newBorns) {
        this.population += newBorns;
    }

    public String toString() {
        String str ="";
        for (int i=0; i<this.neighbors.length; i++){
            str += neighbors[i].name+"\n";
        }
        return str;
    }


    Countries[] getNeighbors() {
        return this.neighbors;
    }

    String getName() {
        return this.name;
    }
}
当然,我尝试了一下,发现以下几行不再有效(如果我们对
包装国家进行注释;
并编写
进口国家。*;
):


有人能给我解释一下为什么它们不起作用,以及什么是
进口国。*确实如此吗

由于您没有设置
String getName()
getneighbories()
方法的作用域(在可以访问的地方),因此它们具有
默认的包作用域,即它们可以在同一个包中使用。变量
isEuropean
也是如此。因此,您不能在另一个包中使用它们。 但是,由于您的
测试类
正在扩展
国家
类,您的
国家
类的所有
受保护的
成员都可以访问

访问级别

+---------------+-------+---------+----------+-------+
| modifiers     | class | package | subclass | world |
+---------------+-------+---------+----------+-------+
| Public        |   Y   |    Y    |    Y     |   Y   |
+---------------+-------+---------+----------+-------+
| Protected     |   Y   |    Y    |    Y     |   N   |
+-----------------------+---------+----------+-------+
| Private       |   Y   |    N    |    N     |   N   |
+---------------+-------+---------+----------+-------+
| No Modifiers  |   Y   |    Y    |    N     |   N   |
+---------------+-------+---------+----------+-------+

如果没有修饰符,
isEuropean
getName()
具有默认作用域,也称为包作用域。您的测试不再与类位于同一个包中,因此它只能访问
public
protected
成员(受保护,因为它是
Country
的子类。请参见以下内容:
System.out.println(isEuropean);
System.out.println(getNeighbors());
System.out.println(getName());
+---------------+-------+---------+----------+-------+
| modifiers     | class | package | subclass | world |
+---------------+-------+---------+----------+-------+
| Public        |   Y   |    Y    |    Y     |   Y   |
+---------------+-------+---------+----------+-------+
| Protected     |   Y   |    Y    |    Y     |   N   |
+-----------------------+---------+----------+-------+
| Private       |   Y   |    N    |    N     |   N   |
+---------------+-------+---------+----------+-------+
| No Modifiers  |   Y   |    Y    |    N     |   N   |
+---------------+-------+---------+----------+-------+
System.out.println(getNeighbors());