问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

java protected修饰符同包内可访问,继承该类的子类可以访问,不管该子 ...

发布网友 发布时间:2024-10-01 15:38

我来回答

3个回答

热心网友 时间:2024-10-17 18:25

子类对象也是可以访问的。

package com.corn.objectsummary;

import com.corn.Person;

public class ObjectTest {

    public static void main(String[] args) {

        Object o1 = new Object();
        // The method clone() from the type Object is not visible
        Object clone = o1.clone();
    }

}

例子很简单,在main()方法中,new一个Oject对象后,想直接调用此对象的clone方法克隆一个对象,但是出现错误提示:"The method clone() from the type Object is not visible"
why? 根据提示,第一反应是ObjectTest类中定义的Oject对象无法访问其clone()方法。回到Object类中clone()方法的定义,可以看到其被声明为protected,估计问题就在这上面了,protected修饰的属性或方法表示:在同一个包内或者不同包的子类可以访问。显然,Object类与ObjectTest类在不同的包中,但是ObjectTest继承自Object,是Object类的子类,于是,现在却出现子类中通过Object引用不能访问protected方法,原因在于对"不同包中的子类可以访问"没有正确理解。
"不同包中的子类可以访问",是指当两个类不在同一个包中的时候,继承自父类的子类内部且主调(调用者)为子类的引用时才能访问父类用protected修饰的成员(属性/方法)。 在子类内部,主调为父类的引用时并不能访问此protected修饰的成员。!(super关键字除外)
于是,上例改成如下形式,我们发现,可以正常编译:

package com.corn.objectsummary;


public class ObjectTest {

    public static void main(String[] args) {
        ObjectTest ot1 = new ObjectTest();

        try {
            ObjectTest ot2 = (ObjectTest) ot1.clone();
        } catch (CloneNotSupportedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

}

热心网友 时间:2024-10-17 18:23

我们来试一下嘛~~~just do it




我的测试代码:
基类代码:包为com.fu


package com.fu;  
  
public class Base {  
      
        protected int protectedInt;  //protected成员  
        public int publicInt;        //public 成员  
        protected  int  getProtectedInt(){  
            return protectedInt;  
        }  
        protected static int staticProtectInt;  
        private int privateInt;  
        public static void main(String[] args) {  
            Base b=new Base();  
            b.privateInt=5;  
        }  
}


不同包内派生类:com.zi


package com.zi;  
  
import com.fu.Base;  
  
public class TestOtherPackageSubClass extends Base {  
    public void test() {  
        Base b = new Base(); // 使用基类  
        b.publicInt = 0; // 可以访问  
        //b.protectedInt=3; // 访问protected的属性失败  
        //b.getProtectedInt(); // 访问protected的方法失败 
        Base.staticProtectInt=9;  
    }  
      
    public void test2() {  
        //privateInt =6;   //访问父类的私有-出错
        publicInt = 0; // 可以访问  
        protectedInt = 2; // 直接用父类的属性-成功  
        super.protectedInt=4;  
          
        getProtectedInt(); // 直接用父类的方法-成功  
        System.out.println("getProtectedInt-test2:"+getProtectedInt());  
          
        protectedInt = 22; // 直接用父类的属性-成功  
        Base.staticProtectInt=10;  
        super.getProtectedInt(); // 直接用父类的方法-成功  
        System.out.println("getProtectedInt-test2:"+getProtectedInt());  
    }  
      
    public void test3(){  
        TestOtherPackageSubClass t=new TestOtherPackageSubClass();  
        t.protectedInt=6;  
        t.getProtectedInt();  
        System.out.println("getProtectedInt-test3:"+t.getProtectedInt());  
    }  
      
    public static void main(String[] args) {  
        TestOtherPackageSubClass t=new TestOtherPackageSubClass();  
        t.test2();  
        System.out.println(Base.staticProtectInt);  
    }  
}


运行结果为:

getProtectedInt-test2:4
getProtectedInt-test2:22
10


从运行结果 4,22 看出  test2 中不管有没有写super.protectInt,还是直接protectInt 都是指向父类的成员。从这可以看出不在同一包的子类可以访问父类数据成员。

热心网友 时间:2024-10-17 18:19

是的 子类 不再 同一个包 也可以访问的 。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
请律师或懂法律的帮帮我,看我的事我应该怎么办 我想要律师帮我查对方财产资料要收什么费??? 四团镇自然环境 奉贤区四团镇平安社区到宝山震旦学院怎么走 欠钱不还的可以搬走他的东西作抵押吗 围魏救赵成语故事简介 一首歌歌词:~~~的人啊,不要总去在意到底谁爱谁会多一点。求歌名、歌词... 《完美世界》主题曲《风骨》完整歌词 荒天帝专用bgm 城市土地使用税属于什么税 ...public private protectde 三种修饰符对类成员的访问的限制强度的顺... 数学题解答一个房子宽是30个地板砖,长是17个砖,砖的大小是80公分乘以80... 简单数学题 已知一个立方440元,40公分×40公分×4公分多少钱以及... 法令纹用什么填充最好 法令纹填充注意事项 海薇玻尿酸为啥便宜(哪种玻尿酸牌子比较好 质量可靠的玻尿酸品牌推荐... 丝丽玻尿酸打眼周有妹子做过吗?讲讲经验 从深圳骑车到黑龙江 有可以带指南针功能的码表吗? 山西地震带的分布特点 山西的地震带在哪里 民族学年会会公开发表论文集吗 香椿树的种子可以治疗胃病吗 香椿树果听说可以治疗胃病, 福州第十一中位于哪里 福州第十一中学公交地址 迎接奥运用的小国旗市场价是多少? 怎样在WPS中更改PPT文档左下角的主题文字? 有什么做笋干牛肉煲的教程分享? 笋干烧牛肉的家常做法有哪些? 如图是电子技术中常用的电路.a、b是电路的输入端,其中输入的高频电流... 为什么子类重写父类的方法的访问修饰符,不能低于父类的方法访问... 被烟熏黄了的牛仔裤怎么能洗干净? vivo xplay怎么进入recovery 我自己录制了一个MP3音频文件把它传到哪个网盘得到的连接可以在QQ空间里... 帮我找5首好听的歌 鱼胶瑶柱粥的做法 鱼胶可以炖什么汤 小米鱼胶粥如何烹饪简单而又不失美味? 考古博士发现秦朝竹简被活人佣追杀,是什么电视剧 上古卷轴5龙裔剧情触发不了,求解决 天蝎男拿巨蟹没办法怎样的相处模式 海尔型号KFRd一50LW/Z(F)用电情况 海尔Haier KFRd-50LW/02UC-S3 从汉口到市民之家坐什么公交 温庭筠的【处士卢岐山居】含联与颈联写景角度有什么不同?展现了山居景... 丛汉口火车站坐什么车可以到武汉市民之家? 鲍鱼适合搭配哪些食材一块炖? 鲍鱼炖什么比较有营养 ...有没有什么方法不用旋转也可以打印成A4的图幅 这是我家狗狗,大家帮忙起个名字吧~~~