Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.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_Oop_Access Modifiers - Fatal编程技术网

Java 当我们在默认类中有公共方法时,为什么编译器不给出错误

Java 当我们在默认类中有公共方法时,为什么编译器不给出错误,java,oop,access-modifiers,Java,Oop,Access Modifiers,当我们在默认类中有公共方法时,为什么JAVA编译器不给出错误 当我们有非公共类(比如说默认访问级别)时,如果我们在该类中有公共方法,如下所示 class Main { public void doStuff() { } } 那么我们就不能从同一个包的外部访问上面的doStuff()方法。但对上述方法使用公共访问修改器是合法的。那么它的目的是什么呢?允许public访问具有包可见性的类的成员是无害的:以这种方式定义它并不矛盾,因此编译器允许它 但是,让包的成员可见类publi

当我们在默认类中有公共方法时,为什么JAVA编译器不给出错误

当我们有非公共类(比如说默认访问级别)时,如果我们在该类中有公共方法,如下所示

class Main {

    public void doStuff() {

    }
}

那么我们就不能从同一个包的外部访问上面的doStuff()方法。但对上述方法使用公共访问修改器是合法的。那么它的目的是什么呢?

允许
public
访问具有包可见性的类的成员是无害的:以这种方式定义它并不矛盾,因此编译器允许它


但是,让包的成员可见类
public
并不会扩展其可见性,这一点您当然是对的:如果所属类具有包可见性,使其所有的公共成员包可见并不会改变任何事情。

允许
public
访问具有包可见性的类的成员没有害处:以这种方式定义它并不矛盾,因此编译器允许它


但是,让包的成员可见类
public
并不会扩展其可见性,这一点您当然是对的:如果所属类具有包可见性,那么让其所有的公共成员包可见并不会改变任何事情。

因为这不是一个错误,因为可能需要避免一个错误:例如,如果它是一个接口方法的实现。

因为它不是一个错误,因为可能需要避免一个错误:例如,如果它是一个接口方法的实现。

同一个包中的某个人可以实例化一个Main,并将其作为对象或接口传递给另一个类。在前一种情况下,像toString()和equals()这样的方法必须是公共的,在后一种情况下,该接口的方法必须是公共的。

同一个包中的某个人可以实例化Main,并将其作为对象或接口传递给另一个类。在前一种情况下,像toString()和equals()这样的方法必须是公共的,而在后一种情况下,该接口的方法必须是公共的。

方法可以通过反射调用,而且-afair javac在这种情况下会发出通知,因为在Java的旧时代,您可以从默认包
导入
;这是向后兼容性的一大优点,它毫无理由地阻碍了未来几代人的发展。方法可以通过反射调用,而且-afair javac在这种情况下会发出通知,因为在旧Java时代,您可以从默认包中导入
;这就是向后兼容性的伟大之处,它无缘无故地阻碍了几代人的未来。