当前位置: 技术问答>java相关
有关Java构造函数的问题之四——冲突性
来源: 互联网 发布时间:2015-02-11
本文导语: 一个类的声明可以有public或缺省的package修饰符,而它的构造函数则有更多的修饰符:public,protect,package(缺省)和private。现假设有一个类package class test,它有一个构造函数public test(),还有一个不与test在同一packag...
一个类的声明可以有public或缺省的package修饰符,而它的构造函数则有更多的修饰符:public,protect,package(缺省)和private。现假设有一个类package class test,它有一个构造函数public test(),还有一个不与test在同一package中的类another_test,则会出现一个可笑的问题:another_test可以实例化一个test对象,却不能使用它!
请问:类声明中的修饰符与构造函数的修饰符有无相互制约的关系呢?
请问:类声明中的修饰符与构造函数的修饰符有无相互制约的关系呢?
|
你试过?
如果test不是public的类,根本在其它包里没法构造的,因为你根本不能访问到它。
|
public class HelloWorld {
private HelloWorld() {
System.out.println("A new HelloWorld object.");
}
private void hello() {
System.out.println("HelloWorld!");
}
private static void main(String[] strv) {
HelloWorld h = new HelloWorld();
h.hello();
}
}
private HelloWorld() {
System.out.println("A new HelloWorld object.");
}
private void hello() {
System.out.println("HelloWorld!");
}
private static void main(String[] strv) {
HelloWorld h = new HelloWorld();
h.hello();
}
}
|
不知道你是怎么使用的?源码贴出来看看
|
SL275中说明是:
变量和方法有四种访问权限:public,protected,default,private,而类只能有两种:default,public,有defualt权限的变量、方法或类只能从同一个包中的类的任何方法中访问,而protected的变量或方法可以被该类,同一包,子类访问,private只能被该类访问,public可以被所有的访问。
在另一个包中的类是不能实例化一个default类的。
//test.java
package lm;
class test {
public test() {
System.out.print("ok");
}
}
//test2.java
package lm2;
import lm.*;
public class test2{
test t;
public test2(){
t=new test();
}
}
test2根本就不能编译通过,出错信息是:lm中的lm.test不是公有的,不能被外部包访问。
你是如何实例化的呢?
变量和方法有四种访问权限:public,protected,default,private,而类只能有两种:default,public,有defualt权限的变量、方法或类只能从同一个包中的类的任何方法中访问,而protected的变量或方法可以被该类,同一包,子类访问,private只能被该类访问,public可以被所有的访问。
在另一个包中的类是不能实例化一个default类的。
//test.java
package lm;
class test {
public test() {
System.out.print("ok");
}
}
//test2.java
package lm2;
import lm.*;
public class test2{
test t;
public test2(){
t=new test();
}
}
test2根本就不能编译通过,出错信息是:lm中的lm.test不是公有的,不能被外部包访问。
你是如何实例化的呢?
|
只有公有的类在才能被外部包访问,
或者是在同一个包内
或者是在同一个包内