解决方案 »

  1.   

    f.test1();//这里报错,但是test1()是protected的啊
      

  2.   


    protected,表示有条件的限制以保护该成员,当您将类别成员定义为protected之后,继承它的类就可以直接使用这些成员,但这些成员仍然受到对象范围的保护,不可被对象直接使用。对protected而言:Son extends Father,在子类Son的作用范围内,只能调用Son定义的对象的protected方法(即该方法从父类Father中继承而来);
    而不能调用Father类对象的protected 方法:Father f = new Father();
      

  3.   

    在不同的包中这样用肯定会有错;
    不能用Father的对象引用;
      

  4.   

    疏忽了,protected权限问题,关键字提供 包访问权限,子类可以访问。
      

  5.   

    没搞懂   表示明天去问老师,只是你的Son既然都继承了Father ,为怎么还要建Father 的对象呢,需求是这样的么?
      

  6.   


    protected修饰的变量可以在另外一个包中引用啊,只要那个类是定义protected成员的类的子类。这不是proected的定义吗?
    确定报错,错误提示把test1()改成protected,但是本来就是protected的啊!
    难道编译器的问题?这个问题好。不是需求,只是实验
      

  7.   

    就是想测试不同包的情况下protected的效果
      

  8.   

    就是想测试不同包的情况下protected的效果子类能调用test1()是因为子类有test1方法且在访问权限内, 父类不能调用是因为不在访问权限内!你帖子的问题跟你代码表达的疑惑完全没关系,所以你基本概念没弄清楚
      

  9.   

    访问控制权限
    作用范围: 当前类   同一个包   其他package  同包子孙类  不同包子孙类    
    public           可以      可以           可以                    可以                 可以 
    protected      可以      可以         不可以                可以                   可以
    default          可以      可以          不可以               可以                   不可以
    private          可以      不可以       不可以               不可以               不可以
     
    lz看看上面的访问权限,你的程序是不同包的。package zpc.databaseTest;和package TinkingJava;访问当然会出错。
      

  10.   


     protected void test1(){
            System.out.println("name=");
        }
    这样试试~~~~嘿嘿
      

  11.   

    不好意思 刚刚看错题了~~~
    你这属于编译错误吧??
    protected修饰的属性、方法只能在同一个包的情况下访问,看你的package,很明显不在一个包里~~~
      

  12.   

    我认为你对protected权限的了解有误;
    protected 表明被它修饰的成员变量和方法为保护类型,在同一个包里和 public 类型是一样的,也是能够访问到的。但是如果在不同包里的 protected 类型的成员变量就只能通过子类来访问,这个修饰符是区别于其他的修饰符的。子类之所以可以访问是因为,子类继承了父类,这些属性和方法相当于也继承过来了,等同于相同包下的访问这是我的理解,我也学习没多久,希望对你有帮助......
      

  13.   

    protected是指子类继承父类时,可以被子类继承的部分。在子类内部可以调用,new 以后属于外部。new 后如果不在同包下就不能访问。
      

  14.   

    protected和包没关系,和包有关系的是default
    main在类A里面,A的private方法都能调用,
    因为main是属于这个类的,它的权限范围自然就是A本身,A本身不能调用父类的private方法,但能调用protected方法.
    楼主把main移动其他地方去,就是你想象的
      

  15.   

    其实你迷惑是因为你 只看到了 protected修饰的字段或方法允许被子类访问; 
    却没理解另一个很重要的一个限制:在子类中,该子类中的方法只能用 该子类对象访问protected修饰的字段或方法,而不能用 父类对象或该父类派生的其它子类对象 访问protected修饰的字段或方法;当然这里是在不同的包中;还有就是在对象方法中用super调用父类方法,如super.test1()等,其实这样调用还是限制在该子类的对象方法中;用你的示例来说就是:在Son类中,Son中的方法只能用 Son对象 访问protected修饰的字段或方法;还要注意:编译时变量用的是声明的类型;你还可以新建个包,再创建个子类,这样就能更清楚了解了:
    如:
    public class Son1 extends Father{ public static void main(String[] args) {
    Father f = new Son1();
    f.test1();

    Son son = new Son();
    son.test1();
                                              
                                              Son1 son1 = new Son1();
    son1.test1(); }} 
      

  16.   

    就是想测试不同包的情况下protected的效果子类能调用test1()是因为子类有test1方法且在访问权限内, 父类不能调用是因为不在访问权限内!你帖子的问题跟你代码表达的疑惑完全没关系,所以你基本概念没弄清楚
    父类怎么就不在访问权限内了?test1()在Father类定义了啊不同包不错,但是没看到test1是protected的吗不好意思 刚刚看错题了~~~
    你这属于编译错误吧??
    protected修饰的属性、方法只能在同一个包的情况下访问,看你的package,很明显不在一个包里~~~

    protected修饰的不是只能在一个包才能访问,另外一个包的子类可以,看书!
    貌似是正解!