永发信息网

在java 中子类对象为什么不能比父类对象有更严格的访问权限?

答案:5  悬赏:20  手机版
解决时间 2021-11-20 05:42
  • 提问者网友:書生途
  • 2021-11-19 08:57
在java 中子类对象为什么不能比父类对象有更严格的访问权限?
最佳答案
  • 五星知识达人网友:毛毛
  • 2021-11-19 10:27
因为 向上转型的 及 java 程序 设计维护 的原因

例:
假设一个 父类A 拥有的方法 public void setXXX(){} 可以被其他任意对象调用
这个方法被子类B 覆写后 为 void setXXX(){} 即 默认的 访问权限 只能被本包极其子类 所访问

假设 其他包中的对象 C 调用 方法为 get( A a){
a.setXXX();
}
而此时 传入的 对象为 B类 对象 假设 为b 此时 b将转型为a 但是 b中的setXXX() 调用权限
已经 被 缩小了 这将 造成错误

以上只是一个例子 还有其他出于 易维护 易代码结构设计的 设计思想 原因....
全部回答
  • 1楼网友:英雄的欲望
  • 2021-11-19 14:11
你这样做,那JAVA还有什么用?连面向对象最重要的核心之一多态都没了
  • 2楼网友:街头电车
  • 2021-11-19 13:08
假如父亲为public权限 儿子用private权限 这样就绝子绝孙了 懂么?
  • 3楼网友:举杯邀酒敬孤独
  • 2021-11-19 11:45
因为父类只能有一个,
子类可以有多个。
  • 4楼网友:深街酒徒
  • 2021-11-19 10:55
子类对象“为什么可以”作为父类对象来使用?
简单的回答:因为可以这样,所以可以这样。也就是说因为内存结构支持这样,所以才有了这种语法。
对象实际上就是方法区中的代码+堆中的变量空间,按照类装载规则,当装载子类时一并加载父类,这就意味着只要子类多的代码在内存,则父类的代码也会在内存。创建对象时,按照规则,将会在堆空间中开辟一个空间,这个空间就代表对象。包含的元素有哪些呢?一是类所包含的成员变量(非静态),二是类的超类所包含的成员变量,三是一个指向方法区中类代码的指针。
基于这种结构,不难理解通过父类引用子类的实质。不管通过什么引用,指向的还是那个内存区域,因为对象中包含父类的所有成员变量,所以可以按父类来“套”,通过父类指针访问的变量空间也是父类的变量(如果覆盖)。那么通过父类指针访问的方法呢,显然要通过对象中指向方法区的指针找方法,指向的是哪里?是子类。子类不包含方法怎么办,在找父类。
也就是说,如果发生覆盖,通过父类引用的空间是父类的,而方法是子类的。
简单回答了一下,没有仔细检查语句是否通顺。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯