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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张凯 中级黑马   /  2012-7-24 20:49  /  1536 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 张凯 于 2012-7-26 07:26 编辑

Parent类:
  1. package net;

  2. public class Parent {

  3.         protected void showA() {

  4.                 System.out.println("showA()");

  5.         }

  6. }
复制代码
Child类:
  1. package com;

  2. import net.Parent;

  3. public class Child extends Parent {
  4.         
  5.         public void showB(){
  6.         
  7.                 Parent p = new Parent();
  8.                 p.showA();//这里会出现问题
  9.                
  10.         }
  11.         
  12.         public static void main(String[] args){

  13.                 Child c = new Child();
  14.                 c.showB();               
  15.                
  16.         }

  17. }
复制代码
为什么会提示The method showA() from the type Parent is not visible的异常呢?
showA()是Parent的protected方法,所以可以被同一个类(Parent)中的其它方法,同一个包(net)中的方法和子类(Child)的方法访问。因为showB()是Parent的子类Child的方法,所以应该可以访问父类Parent中修饰为protected的showA()方法啊,为什么就不行呢?

评分

参与人数 1技术分 +1 收起 理由
韦念欣 + 1 赞一个!

查看全部评分

5 个回复

倒序浏览
Parent类中具有包访问权限的,showA方法不能被Child所继承
回复 使用道具 举报
本帖最后由 聂峰 于 2012-7-24 21:30 编辑

你的父类parent是在package net包中,而你的子类child是在另一个包package com包中,如果子类和父类在同一个包中,那么子类能继承父类中protected修饰的方法,而你的程序中不是在一个包中,所以子类不能调用父类中被protected修饰的方法,也就是为什么会报异常的原因。

评分

参与人数 1技术分 +1 收起 理由
韦念欣 + 1 赞一个!

查看全部评分

回复 使用道具 举报
聂峰 发表于 2012-7-24 21:28
你的父类parent是在package net包中,而你的子类child是在另一个包package com包中,如果子类和父类在同一 ...

在package com中已经有import net.Parent了啊,showB()是Parent的子类Child的方法,所以应该可以访问父类Parent中修饰为protected的showA()方法啊
回复 使用道具 举报
张凯 发表于 2012-7-25 20:53
在package com中已经有import net.Parent了啊,showB()是Parent的子类Child的方法,所以应该可以访问父类 ...

导父类的包也不行,必须是在同一个包中。
回复 使用道具 举报
聂峰 发表于 2012-7-25 20:55
导父类的包也不行,必须是在同一个包中。

是这样,原来理解上一直有误区。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马