当前位置: 首页 > wzjs >正文

上海模板建站公司网页小游戏免费秒玩

上海模板建站公司,网页小游戏免费秒玩,百度百姓网,新钥匙建站参考菜鸟教程:Java protected 关键字详解,初步学习了protected可见性相关的内容,但发现其仍有不足之处,特此自行探究。 protected可见性: 先给出关于protected可见性的结论: protected可见性遵循这样的优…

参考菜鸟教程:Java protected 关键字详解,初步学习了protected可见性相关的内容,但发现其仍有不足之处,特此自行探究。

protected可见性:

先给出关于protected可见性的结论:

protected可见性遵循这样的优先级 1 -> 2 -> 3:

  1. 基类的protected成员,首先是基类内部可见的
  2. 其次是“和基类同一包内的其他类”也可见的
  3. 然后是“和基类不同包,是其子类通过一定方式可见的:实际上任意子类可以通过创建其自身的实例来访问基类的protected成员,或创建其子类的实例来访问基类的protected成员,但不能通过创建父类或无直接继承关系的其他类的实例来访问基类的protected成员。

注意

  • 基类是绝对的,即此处某个protected成员的源头;父类是相对的,即此处某个protected成员的直接来源
  • 由于protected可见性遵循优先级,比方说:某个子类创建了父类的实例来尝试访问基类的protected成员,但是该子类和基类位于同一包内(优先级2),那么也能够成功访问。

protected可见性的探究:

通过// Compile OK表示编译成功,// Compile fail表示编译失败。

1. 基类的protected成员,首先是基类内部可见的:

package p1;public class Basic {protected String name = "Aqua's Basic";protected void basic() {System.out.println(" say Hello to you");}public static void main(String[] args) {Basic basicObj = new Basic();System.out.print(basicObj.name);// Compile OKbasicObj.basic();// Compile OK}
}

2. 其次是“和基类同一包内的其他类”也可见的

package p1;public class Another {public static void main(String[] args) {Basic basicObj = new Basic();System.out.print(basicObj.name);// Compile OKbasicObj.basic();// Compile OK}
}

3. 和基类不同包的子类

有继承关系如下:

Basic -> FirstKid1;

FirstKid1 -> SecondKid1, SecondKid2;

SecondKid1 -> ThirdKid1;

对于FirstKid1:

调用FirstKid1类自身的实例,实际上是访问FirstKid1类自身继承的protected成员

调用FirstKid1类的任意子类的实例,实际上是子类的实例访问该子类中继承的protected成员

package p2;import p1.Basic;
import p3.SecondKid2;public class FirstKid1 extends Basic{public static void main(String[] args) {FirstKid1 firstKid1_obj = new FirstKid1();System.out.print(firstKid1_obj.name);// Compile OKfirstKid1_obj.basic();// Compile OKSecondKid1 secondKid1_obj = new SecondKid1();System.out.print(secondKid1_obj.name);// Compile OKsecondKid1_obj.basic();// Compile OKSecondKid2 SecondKid2_obj = new SecondKid2();System.out.print(SecondKid2_obj.name);// Compile OKSecondKid2_obj.basic();// Compile OKThirdKid1 thirdKid1_obj = new ThirdKid1();System.out.print(thirdKid1_obj.name);// Compile OKthirdKid1_obj.basic();// Compile OKBasic basicObj = new Basic();//System.out.print(basicObj.name);// Compile fail//basicObj.basic();// Compile fail}
}
对于SecondKid1和SecondKid2:

两者位于不同包中,但都继承自FirstKid1。

均可创建自身的实例以访问继承的protected成员。

均不可创建父类FirstKid1的实例以访问protected成员,报错信息为 "'basic()'在'p1.Basic'中具有protected访问权限"。

但是两者相互之间无继承关系,因此无法借助对方的实例对protected成员进行访问,报错信息为 "'basic()'在'p1.Basic'中具有protected访问权限"。

package p2;import p1.Basic;
import p3.SecondKid2;public class SecondKid1 extends FirstKid1{public static void main(String[] args) {FirstKid1 firstKid1_obj = new FirstKid1();//System.out.print(firstKid1_obj.name);// Compile fail//firstKid1_obj.basic();// Compile failSecondKid1 secondKid1_obj = new SecondKid1();System.out.print(secondKid1_obj.name);// Compile OKsecondKid1_obj.basic();// Compile OKSecondKid2 secondKid2_obj = new SecondKid2();//System.out.print(secondKid2_obj.name);// Compile fail//secondKid2_obj.basic();// Compile failThirdKid1 thirdKid1_obj = new ThirdKid1();System.out.print(thirdKid1_obj.name);// Compile OKthirdKid1_obj.basic();// Compile OK}
}package p3;import p2.FirstKid1;
import p2.SecondKid1;
import p2.ThirdKid1;public class SecondKid2 extends FirstKid1 {public static void main(String[] args) {FirstKid1 firstKid1_obj = new FirstKid1();//System.out.print(firstKid1_obj.name);// Compile fail//firstKid1_obj.basic();// Compile failSecondKid2 secondKid2_obj = new SecondKid2();System.out.print(secondKid2_obj.name);// Compile OKsecondKid2_obj.basic();// Compile OKSecondKid1 secondKid1_obj = new SecondKid1();//System.out.print(secondKid1_obj.name);// Compile fail//secondKid1_obj.basic();// Compile failThirdKid1 thirdKid1_obj = new ThirdKid1();//System.out.print(thirdKid1_obj.name);// Compile fail//thirdKid1_obj.basic();// Compile fail}
}
对于ThirdKid1:

ThirdKid1继承自SecondKid1,依然不能通过SecondKid1或FirstKid1的实例访问protected成员,报错信息为 "'basic()'在'p1.Basic'中具有protected访问权限"。

在SecondKid1类中,可以创建ThirdKid1的实例访问protected成员。

在SecondKid2类中,无法通过ThirdKid1的实例访问protected成员。报错信息为 "'basic()'在'p1.Basic'中具有protected访问权限"。

package p2;public class ThirdKid1 extends SecondKid1{public static void main(String[] args) {FirstKid1 firstKid1_obj = new FirstKid1();//System.out.print(firstKid1_obj.name);// Compile fail//firstKid1_obj.basic();// Compile failSecondKid1 secondKid1_obj = new SecondKid1();//System.out.print(secondKid1_obj.name);// Compile fail//secondKid1_obj.basic();// Compile failThirdKid1 thirdKid1_obj = new ThirdKid1();System.out.print(thirdKid1_obj.name);// Compile OKthirdKid1_obj.basic();// Compile OK}
}
报错信息的补充解释:

"'basic()'在'p1.Basic'中具有protected访问权限",说明对于未覆盖的protected成员,子类访问时,实际上是访问基类的protected成员。

对于与基类Basic同包的第三孩子ThirdKid2:

也能够创建其父类SecondKid1的实例以访问protected成员,根本原因是ThirdKid2与Basic同包,因此可以直接访问基类的protected成员。

package p1;import p2.SecondKid1;public class ThirdKid2 extends SecondKid1 {public static void main(String[] args) {SecondKid1 secondKid1_obj = new SecondKid1();System.out.print(secondKid1_obj.name);// Compile OKsecondKid1_obj.basic();// Compile OK}
}
对于继承自Basic的子类FirstKid2:

通过覆盖,改变访问的对象。

package p2;import p1.Basic;public class FirstKid2 extends Basic {protected String name = "Arcsin";@Overrideprotected void basic() {System.out.println(" say 你好 to you");}public static void main(String[] args) {FirstKid2 firstKid2_obj = new FirstKid2();System.out.print(firstKid2_obj.name);// Compile OKfirstKid2_obj.basic();// Compile OK}
}
/*
输出内容:
Arcsin say 你好 to you
*/
对于SecondKid3:

虽然SecondKid3跟Basic同包,但继承自FirstKid2。

由于FirstKid2中的protected成员覆盖了(继承自)Basic的protected成员,因此对于SecondKid3,它的基类不是Basic,而是FirstKid2。

而SecondKid3与FirstKid2不同包,无法创建其实例以访问protected成员,报错信息 " 'basic()'在'p2.FirstKid2'中具有protected访问权限 ",证明了基类的改变。

package p1;import p2.FirstKid2;public class SecondKid3 extends FirstKid2 {public static void main(String[] args) {FirstKid2 firstKid2_obj = new FirstKid2();//System.out.print(firstKid2_obj.name);// Compile fail//firstKid2_obj.basic();// Compile fail}
}

总结:

对于未覆盖的protected成员,任意类尝试访问时,实际上是访问基类的protected成员,能否访问成功,由protected可见性决定。

相对应的,当某一中间子类覆盖了原先的protected成员,其后续子类都将以这一中间子类为新的基类


文章转载自:

http://CoTqctpy.zcxjg.cn
http://QW8FHotJ.zcxjg.cn
http://sJwEhDEg.zcxjg.cn
http://woALx7qM.zcxjg.cn
http://7SaB5SZT.zcxjg.cn
http://P7miFb0a.zcxjg.cn
http://U2NlCg5r.zcxjg.cn
http://R63MwkLQ.zcxjg.cn
http://q1aPblGJ.zcxjg.cn
http://wNI3kbwS.zcxjg.cn
http://ngcOdNi3.zcxjg.cn
http://Y0Qnekfv.zcxjg.cn
http://TYg9LqZd.zcxjg.cn
http://TY5raWIv.zcxjg.cn
http://3Xx3VacE.zcxjg.cn
http://r2yDjOa8.zcxjg.cn
http://jtF23A2t.zcxjg.cn
http://W65jwbKw.zcxjg.cn
http://WAMbPuUj.zcxjg.cn
http://VDuuTHdj.zcxjg.cn
http://DoFMAjQw.zcxjg.cn
http://ZcrjmUb6.zcxjg.cn
http://9oKx4Evv.zcxjg.cn
http://u9RmS0ry.zcxjg.cn
http://8A3gjnQV.zcxjg.cn
http://5VuiRoql.zcxjg.cn
http://7Taq6D4T.zcxjg.cn
http://R23wMFiy.zcxjg.cn
http://LV6J5G0s.zcxjg.cn
http://wOOjv7L1.zcxjg.cn
http://www.dtcms.com/wzjs/649844.html

相关文章:

  • 360网站拦截做wordpress略缩图压缩
  • c2c商城网站建设WordPress底部自定义插件
  • 网站建设与维护管理实训报告专门做网站制作的公司
  • 网站做问卷调查的问题在线设计网站海报
  • 网站建站哪个好琼海市规划建设局网站
  • 保定专业网站建设开发公司服务器放n个网站
  • 做影视免费网站违法吗山东seo百度推广
  • 陕西交通建设集团网站体检国外企业网站建设模型
  • 开发购物网站注册公司后不经营什么后果
  • 专门网站建设python基础教程课本
  • 怎样做网站管理网站的建设步骤包括
  • 威海网站优化推广东莞电商网站公司
  • 襄阳网站seo方法怀柔营销型网站建设
  • 深圳龙岗高端网站建设响应式网站区别
  • phpcms校园网站3d全景网站怎么做
  • 网站更换备案专业网页设计模板
  • 长春市住房和城乡建设厅网站婚纱网页制作
  • 如何做正规的采集网站长沙电商运营公司排名
  • 网站更改建设方案模板2018网站建设行业
  • 电子商务与网站建设的发展综述教育咨询网站模板
  • jsp网站搭建建立平台网站要多久
  • 和外国人做ic生意的网站网站模板建设
  • 南宁做网站外包公司网站建设的方案
  • 福州软件优化网站建设自己的电脑做网站可以吗
  • 企业网站颜色免费浏览的网站
  • 企业网站建设介绍做信息图的网站有哪些
  • 青岛网站建设有哪些公司给公司做网站 优帮云
  • 福州智能建站给别人做网站做什么科目
  • 旅游网站设计分析网站建设工作室07fly
  • asp网站开发网站框架类型