黑马程序员技术交流社区

标题: 为什么会抛异常,无法访问 [打印本页]

作者: 张凯    时间: 2012-7-24 20:49
标题: 为什么会抛异常,无法访问
本帖最后由 张凯 于 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()方法啊,为什么就不行呢?

作者: 李菁    时间: 2012-7-24 21:13
Parent类中具有包访问权限的,showA方法不能被Child所继承
作者: 乐峰    时间: 2012-7-24 21:28
本帖最后由 聂峰 于 2012-7-24 21:30 编辑

你的父类parent是在package net包中,而你的子类child是在另一个包package com包中,如果子类和父类在同一个包中,那么子类能继承父类中protected修饰的方法,而你的程序中不是在一个包中,所以子类不能调用父类中被protected修饰的方法,也就是为什么会报异常的原因。
作者: 张凯    时间: 2012-7-25 20:53
聂峰 发表于 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:55
张凯 发表于 2012-7-25 20:53
在package com中已经有import net.Parent了啊,showB()是Parent的子类Child的方法,所以应该可以访问父类 ...

导父类的包也不行,必须是在同一个包中。
作者: 张凯    时间: 2012-7-25 20:58
聂峰 发表于 2012-7-25 20:55
导父类的包也不行,必须是在同一个包中。

是这样,原来理解上一直有误区。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2