在java中包私有类的公共方法,其它包的类能访问吗

 我来答
轮生影6177
2014-01-23 · TA获得超过146个赞
知道答主
回答量:152
采纳率:100%
帮助的人:44.2万
展开全部

我知道你不想看测试的,所以直接给答案:

包私有类,其它包的类是不能访问的 ,那如果包私有类中的方法是Public呢 其它包的类还能访问这个方法吗

你说的私有类只可能是内部类,因为外部类是只有包或者公开访问权限的,

那如果包私有类中的方法是Public呢 其它包的类还能访问这个方法吗

我假设你提问的是内部类,不可以,因为它连这个类都访问不了,可以这样理解,一个私有内部类中的方法访问权限也肯定是private,不然的话,别人就可以访问了


测试一下内部类的情况:

package Lianxi.yong;

public class Test{
private class privateTest3{//内部类是可以声明为私有的
public void publciTest(){}
private void privateTest(){}
protected void protectedTest(){}
void defaultTest(){}
}
protected class ProtectedTest3{//内部类是可以声明为保护的
public ProtectedTest3(){}//要想要子类访问,这里必须把构造方法设置为public
public void publciTest(){}
private void privateTest(){}
protected void protectedTest(){}
void defaultTest(){}
}
class DefaultTest3{//内部类是可以声明为默认的
public void publciTest(){}
private void privateTest(){}
protected void protectedTest(){}
void defaultTest(){}
}
public class PublicTest3{//内部类是可以声明为公开的
public void publciTest(){}
private void privateTest(){}
protected void protectedTest(){}
void defaultTest(){}
}
public static void main(String[] args) {
(new Test()).new privateTest3().publciTest();//这个私有类这里可以访问,公有方法可以访问
(new Test()).new privateTest3().privateTest();//这个私有类这里可以访问,私有方法可以访问
(new Test()).new privateTest3().protectedTest();//这个私有类这里可以访问,保护方法可以访问
(new Test()).new privateTest3().defaultTest();//这个私有类这里可以访问,默认访问权限方法可以访问

(new Test()).new ProtectedTest3().publciTest();//这个保护类这里可以访问,公有方法可以访问
(new Test()).new ProtectedTest3().privateTest();//这个保护类这里可以访问,私有方法可以访问
(new Test()).new ProtectedTest3().protectedTest();//这个保护类这里可以访问,保护方法可以访问
(new Test()).new ProtectedTest3().defaultTest();//这个保护类这里可以访问,默认访问权限方法可以访问

(new Test()).new DefaultTest3().publciTest();//这个默认访问权限类这里可以访问,公有方法可以访问
(new Test()).new DefaultTest3().privateTest();//这个默认访问权限类这里可以访问,私有方法可以访问
(new Test()).new DefaultTest3().protectedTest();//这个默认访问权限类这里可以访问,保护方法可以访问
(new Test()).new DefaultTest3().defaultTest();//这个默认访问权限类这里可以访问,默认访问权限方法可以访问

(new Test()).new PublicTest3().publciTest();//这个公有类这里可以访问,公有方法可以访问
(new Test()).new PublicTest3().privateTest();//这个公有类这里可以访问,私有方法可以访问
(new Test()).new PublicTest3().protectedTest();//这个公有类这里可以访问,保护方法可以访问
(new Test()).new PublicTest3().defaultTest();//这个公有类这里可以访问,默认访问权限方法可以访问
}
}
//private class Test2{//根本就无法声明私有类
//
//}

测试不同包的情况:

package Lianxi.yong2;

import Lianxi.yong.Test;

public class Test2 {
public void test(){
(new Test()).new privateTest3().publciTest();//这个私有类这里不可以访问
(new Test()).new privateTest3().privateTest();//这个私有类这里不可以访问
(new Test()).new privateTest3().protectedTest();//这个私有类这里不可以访问
(new Test()).new privateTest3().defaultTest();//这个私有类这里不可以访问

(new Test()).new ProtectedTest3().publciTest();//这个保护类这里不可以访问
(new Test()).new ProtectedTest3().privateTest();//这个保护类这里不可以访问
(new Test()).new ProtectedTest3().protectedTest();//这个保护类这里不可以访问
(new Test()).new ProtectedTest3().defaultTest();//这个保护类这里不可以访问

(new Test()).new DefaultTest3().publciTest();//这个默认访问权限类这里不可以访问
(new Test()).new DefaultTest3().privateTest();//这个默认访问权限类这里不可以访问
(new Test()).new DefaultTest3().protectedTest();//这个默认访问权限类这里不可以访问
(new Test()).new DefaultTest3().defaultTest();//这个默认访问权限类这里不可以访问

(new Test()).new PublicTest3().publciTest();//这个公有类这里可以访问,公有方法可以访问

(new Test()).new PublicTest3().privateTest();//这个公有类这里可以访问,私有方法不可以访问
(new Test()).new PublicTest3().protectedTest();//这个公有类这里可以访问,保护方法不可以访问
(new Test()).new PublicTest3().defaultTest();//这个公有类这里可以访问,默认访问权限方法不可以访问
}
}


测试相同包的情况:

package Lianxi.yong;

import Lianxi.yong.Test.DefaultTest3;
import Lianxi.yong.Test.ProtectedTest3;
import Lianxi.yong.Test.PublicTest3;
import Lianxi.yong.Test.privateTest3;

public class SamePackageTest {
public static void main(String[] args) {
(new Test()).new privateTest3().publciTest();//这个私有类这里不可以访问
(new Test()).new privateTest3().privateTest();//这个私有类这里不可以访问
(new Test()).new privateTest3().protectedTest();//这个私有类这里不可以访问
(new Test()).new privateTest3().defaultTest();//这个私有类这里不可以访问

(new Test()).new ProtectedTest3().publciTest();//这个保护类这里可以访问,公有方法可以访问
(new Test()).new ProtectedTest3().privateTest();//这个保护类这里可以访问,私有方法不可以访问
(new Test()).new ProtectedTest3().protectedTest();//这个保护类这里可以访问,保护方法可以访问
(new Test()).new ProtectedTest3().defaultTest();//这个保护类这里可以访问,默认访问权限方法可以访问

(new Test()).new DefaultTest3().publciTest();//这个默认访问权限类这里可以访问,公有方法可以访问
(new Test()).new DefaultTest3().privateTest();//这个默认访问权限类这里可以访问,私有方法不可以访问
(new Test()).new DefaultTest3().protectedTest();//这个默认访问权限类这里可以访问,保护方法可以访问
(new Test()).new DefaultTest3().defaultTest();//这个默认访问权限类这里可以访问,默认访问权限方法可以访问

(new Test()).new PublicTest3().publciTest();//这个公有类这里可以访问,公有方法可以访问

(new Test()).new PublicTest3().privateTest();//这个公有类这里可以访问,私有方法不可以访问
(new Test()).new PublicTest3().protectedTest();//这个公有类这里可以访问,保护方法可以访问
(new Test()).new PublicTest3().defaultTest();//这个公有类这里可以访问,默认访问权限方法可以访问
}
}

测试子类的情况:

package Lianxi.yong2;

import Lianxi.yong.Test;
import Lianxi.yong.Test.DefaultTest3;
import Lianxi.yong.Test.ProtectedTest3;
import Lianxi.yong.Test.PublicTest3;
import Lianxi.yong.Test.privateTest3;

public class SubTest extends Test {
public void test(){
new privateTest3().publciTest();//这个私有类这里不可以访问
new privateTest3().privateTest();//这个私有类这里不可以访问
new privateTest3().protectedTest();//这个私有类这里不可以访问
new privateTest3().defaultTest();//这个私有类这里不可以访问

new ProtectedTest3().publciTest();//这个保护类这里可以访问,公有方法可以访问
new ProtectedTest3().privateTest();//这个保护类这里可以访问,私有方法不可以访问
new ProtectedTest3().protectedTest();//这个保护类这里可以访问,保护方法不可以访问
new ProtectedTest3().defaultTest();//这个保护类这里可以访问,默认访问权限方法不可以访问

new DefaultTest3().publciTest();//这个默认访问权限类这里不可以访问
new DefaultTest3().privateTest();//这个默认访问权限类这里不可以访问
new DefaultTest3().protectedTest();//这个默认访问权限类这里不可以访问
new DefaultTest3().defaultTest();//这个默认访问权限类这里不可以访问

new PublicTest3().publciTest();//这个公有类这里可以访问,公有方法可以访问
new PublicTest3().privateTest();//这个公有类这里可以访问,私有方法不可以访问
new PublicTest3().protectedTest();//这个公有类这里可以访问,保护方法不可以访问
new PublicTest3().defaultTest();//这个公有类这里可以访问,默认访问权限方法不可以访问
}
}

内部类相当于外部类的一个属性,所以一般的访问权限的规则都适合于内部类,而且内部类的方法相当于外部类的方法来对待,如果内部类的访问权限是protected,则内部类中的方法的访问权限也是protected,这也是为什么

protected class ProtectedTest3{//内部类是可以声明为私有的
    public ProtectedTest3(){}//要想要子类访问,这里必须把构造方法设置为public
    public void publciTest(){}
    private void privateTest(){}
    protected void protectedTest(){}
    void defaultTest(){}
}

ProtectedTest3的构造方法访问权限是protected,跟内部类的访问权限一样,所以需要写明是public

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式