相关文章:   
关于JAVA的继承!有兴趣的可以进来讨论一下! 
关于super的疑惑,已问过多人未果,请指点 
对java方法的访问控制的深思考 推荐圈子: 每日一题JAVA 
更多相关推荐 程序如下: 
类A: 
package cn; public class A { 
protected void proMethod() 

System.out.println("base protected method"); 

} A中有protected方法。 B类为A类的子类(包名不同): package com; 
import cn.A;; 
public class B extends A{ 
public static void main(String[] args) { 
  A a = new A(); 
  a.proMethod(); 


以上B中的a.proMethod();出错。出错信息为:The method proMethod() from the type A is not visible 为什么?protected方法不是可以对子类公开的吗? 

解决方案 »

  1.   

    package com; 
    import cn.A; 
    public class B extends A{ 
    public static void main(String[] args) { 
      B b=(B)new A(); 
      b.proMethod(); 

    } 这样写就可以了,你看看protected 以及多态吧
      

  2.   

    protected 的访问范围有两种1、该类的子类package com; 
    import cn.A;public class B extends A {
    public static void main(String[] args) {
    //A a = new A();
    //a.proMethod();不在同一个包中无法访问A类的protected方法

    B b = new B();
    b.proMethod(); //子类从父类继承来的protected方法,可以访问
    }
    }
    2、同一包中的类package cn;
    public class C {
    public static void main(String[] args) {
    A a = new A();
    a.proMethod(); //同一包中可以调用
    B b = new B();
    b.proMethod(); //子类从父类继承来的protected方法,可以访问
    }
    }
      

  3.   

    要解决楼主的问题,就要首先弄清楚protected是做什莫用的
    被protected定义的类成员表明,任何子类都能够通过继承来访问它然而这并不意味着子类能够通过父类的实例来访问(排除他们在同一个包内的状况)
    就像楼主的
    A a = new A(); 
    a.proMethod(); 也就是说protected等于继承,对于包外子类,只能通过继承来访问父类protected的成员
      

  4.   

    既然楼主说到了protected,那就给lz出个题吧假设
    包package1中有类A
     类A有一个成员变量是 protected int x = 1包package2中有类B,类B继承类A包package2中还有一个类C请问,在类C中new一个类B的实例
    能通过这个实例访问类B继承自类A的变量 x 吗
      

  5.   


    建议楼上的不要乱up,先辨明真伪
    〉protected 的访问范围有两种:子类和同一包中的类同一个包里的,拥有默认访问级别的方法都是可以访问的,讨论protected有何意义?
    子类?
    楼主也是在子类里访问的,怎莫就报错呢