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

包私有类,其它包的类是不能访问的,那如果包私有类中的方法是Public呢其它包的类还能访问这个方法吗... 包私有类,其它包的类是不能访问的 ,那如果包私有类中的方法是Public呢 其它包的类还能访问这个方法吗 展开
 我来答
每天学点Java
推荐于2017-11-26 · TA获得超过5938个赞
知道大有可为答主
回答量:3547
采纳率:0%
帮助的人:1342万
展开全部

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

包私有类,其它包的类是不能访问的 ,那如果包私有类中的方法是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

更多追问追答
追问
我说的不是内部类哦  问的是包私有
追答

包没有访问权限的概念,也就是说不可以修饰一个包,让它成为私有的公有的保护等等

也没有私有外部类的概念

比如

private class PrivateTest{//Illegal modifier for the class PrivateTest; only public, abstract & final are permitted

}

直接报错,这里的PrivateTest不是内部类

一个外部类要么只有这个包可以访问,要么其他所有包,包括这个包都可以访问


不好意思,我看出了,不过你也要说明白,那是包访问权限,不是包私有,至少我没有看过这种说法

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

不可以,因为包都访问不了

package Lianxi.yong;

class DefaultTest {
public void publicTest(){

}
}
package Lianxi.yong2;

import Lianxi.yong.DefaultTest;//The type Lianxi.yong.DefaultTest is not visible

public class OtherPackageTest {
public  void test() {
new DefaultTest();//
}
}

我也是这么认为 但是就是不太肯定 那如果我一定要调用这个包私有类中的方法呢

给出一种解决方案

package Lianxi.yong;
class DefaultTest {
public void publicTest(){

}
}
public class PublicTest{
private DefaultTest dt = new DefaultTest();
public void method(){
dt.publicTest();
}
}

 

package Lianxi.yong2;
import Lianxi.yong.PublicTest;
public class OtherPackageTest {
//首先必须把这个类暴露出来,一般是作为另一个公有类的私有属性,然后这个公有类就可以任意操纵这个包私有类了
public void test(){
new PublicTest().method();
}
}
育知同创教育
2018-07-27 · 百度知道合伙人官方认证企业
育知同创教育
1【专注:Python+人工智能|Java大数据|HTML5培训】 2【免费提供名师直播课堂、公开课及视频教程】 3【地址:北京市昌平区三旗百汇物美大卖场2层,微信公众号:yuzhitc】
向TA提问
展开全部
包私有类,其它包的类是不能访问的 ,那如果包私有类中的方法是Public呢 其它包的类还能访问这个方法吗

说的私有类只可能是内部类,因为外部类是只有包或者公开访问权限的,
那如果包私有类中的方法是Public呢 其它包的类还能访问这个方法吗
假设提问的是内部类,不可以,因为它连这个类都访问不了,可以这样理解,一个私有内部类中的方法访问权限也肯定是private,不然的话,别人就可以访问了
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
美型与拽拽
2014-01-22
知道答主
回答量:17
采纳率:0%
帮助的人:11.2万
展开全部
private class TTT{}
内部类用private做修饰可以的,只有这个内部类的外部类可以访问这个内部类。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友fe59b4c2b
2014-01-22 · TA获得超过1130个赞
知道小有建树答主
回答量:1174
采纳率:0%
帮助的人:779万
展开全部
不能,私有类跟private 变量其实一样,这么理解
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
pheh
2014-01-22 · TA获得超过287个赞
知道小有建树答主
回答量:283
采纳率:0%
帮助的人:124万
展开全部
private类里是不能声明public方法的,语法报错
追问
我说的是类的访问控制 一种是公共 一种是包私有的  你们都理解错了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(5)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式