A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

class fu
{
        void speak()
        {
                System.out.println("vb");
        }
}
class zi extends fu
{
如果小于,肯定会出现问题,到底出现什么问题呢,想不通,为什么呢
        private void speak()
        {
                System.out.println("java");
        }
         
}

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

7 个回复

倒序浏览
3品官是不是有7品官所有的权利呢?如果3品官的权利没有7品的大,那他的能耐如何实施?
回复 使用道具 举报
太深的讲不出来,唯一知道的是Java的多态特性;
1、包括Java在内大部分编程语言都会倾向在编译时将运行时问题解决,所以为避免 下面第2点 出现的问题,会在代码编写时限定;
2、已知Java的多态与泛型中,父类引用可以指向子类对象,那么当拿着父类引用去访问子类对象中方法时因子类对象拥有的父类方法为private时,那么父类引用就无法访问到,那么运行就会出错。
仅是个人理解,仅供参考,这个还需要编写代码去考证。

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
覆盖:
1,子类覆盖父类,必须保证子类权限大于等于父类权限,才可以覆盖,否则编译失败。
2,静态只能覆盖静态。

你这个子类是private,父类是默认权限,子类的权限比父类的低,虚拟机会报错,“正在尝试指定更低的访问权限”。

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
重写也叫覆写,修饰符、返回类型、参数就是要和父类一摸一样才叫覆写,意思是说各个地方都需要完美的盖住,在面向接口编程中,重写是子类有自己的逻辑要实现,同时又不破坏已写好程序逻辑的好方法
======================================================
举个例子,在父类中是public的方法,如果子类中将其降低访问权限为private,那么子类中重写以后的方法对于外部对象就不可访问了,这个就破坏了继承的含义

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
还是不大懂  谢了 楼上的
回复 使用道具 举报
  米奇 发表于 2014-3-23 10:08
重写也叫覆写,修饰符、返回类型、参数就是要和父类一摸一样才叫覆写,意思是说各个地方都需要完美的盖住, ...

您所说的就绝对了,当然你的解释是对的,只不过LZ的问题也指出了子类方法覆盖父类方法为什么权限要大于等于父类的? 所以不是说修饰符也要完全一模一样。
  1. package com.Java1;     /*例1,三个同在一个包中的类,此段代码是证明子类方法权限可大于父类方法权限;   */
  2. public class Demo1 {
  3.     public static void main(String[] args) {
  4.        Father f = new Child();
  5.        f.print();
  6.     }
  7. }

  8. class Father{
  9.    void print(){
  10.         System.out.println("This is the Father");
  11.     }
  12. }
  13. class Child extends Father{
  14.     protected void print(){    //public > protected > 默认(空/无) > private ;
  15.         System.out.println("This is the Child");
  16.     }
  17. }
复制代码


下面这段代码是补充之前的解释:
  1. package com.Java1;
  2. public class Demo1 {
  3.     public static void main(String[] args) {
  4.        Father f = new Child();
  5.        f.print();
  6.     }
  7. }
  8. //下面为带继承关系的其他包com.Java2中两个类;
  9. package com.Java2;
  10. public class Father{
  11.    public void print(){
  12.         System.out.println("This is the Father");
  13.     }
  14. }

  15. package com.Java2;
  16. public class Child extends Father{
  17.     protected void print(){   //protected权限修饰符只允许被同个包com.java2中的类访问也就无法被com.java1中的访问到,即使是用父类引用来调用。
  18.         System.out.println("This is the Child");
  19.     }
  20. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报 1 0
果子类的访问权限范围更小的话,那么子类中重写以后的方法对于外部对象就不可访问了,这个就破坏了继承的含义,子类的访问权限修饰符不能更低.
权限修饰符的优先级 public > protected >package> private  

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马