当前位置:  技术问答>java相关

关于protected的访问问题。

    来源: 互联网  发布时间:2015-03-21

    本文导语:  我知道如果super class与sub class 在不同的包中,sub class 不能访问super class 的protected 变量和方法。但是sub class 为什么能够在重载protected method时,用super访问super class 的protect method呢? 哪位大侠解释一下,在下...

我知道如果super class与sub class 在不同的包中,sub class 不能访问super class 的protected 变量和方法。但是sub class 为什么能够在重载protected method时,用super访问super class 的protect method呢?
哪位大侠解释一下,在下初学乍练,以后请多多指教。谢谢。

//file Test1.java
package a;
public class Test1{
  protected void f(){ System.out.println("Super protected method");}
}

//file Test2.java
import a;
public class Test2 extends test1{
  protected void f(){
    super.f();//这句正确。
    System.out.println("Sub protected method");
  }
  public static void main(String[] args){
    Test1 t1=new Test1();
    // t1.f() 这句访问protected方法出错。
    Test2 t2=new Test2();
    t2.f(); //这句正确。
  }
}


|
这个比较复杂,嘻嘻 你看看下面的程序,把“//”去掉或加上,试一试:

- 父类中的protected static方法 和 protected方法,是不一样的
- 在子类中(new Father()).f()是“间接调用父类方法”,在子类中f() 或 super.f()
   是“直接继承调用父类方法”,这2个是不一样的。
- 在子类中(new Father()).f(),和在另一个类中(new Father()).f(),也是不一样的
- 虽然protected包括同包和子类,但实际上同包和子类是不一样的(这是怎么回事?嘻嘻)


package p0;
public class CTest0{
    protected void f(){
      System.out.println("Father-f");
}

    static protected void fs(){
      System.out.println("Father-fs");
}
}



package p1;
public class CTest1 extends p0.CTest0{
    public void g(){
        //super.f();
        f();
    }

    public void h(p0.CTest0 t0){
        //t0.fs();
        ((p1.CTest1)t0).fs();

        //t0.f();
        //((p1.CTest1)t0).f();
    }

    public void f(){
      System.out.println("Son-f");
}
    static public void fs(){
      System.out.println("Son-fs");
}

    public static void main(String[] args){
        //(new CTest1()).h(new p1.CTest1());
        (new CTest1()).g();
    }
}


package p2;
public class CTest2{
  public void m(p0.CTest0 t0){
    //t0.fs();
    ((p1.CTest1)t0).fs();

    //t0.f();
    //((p1.CTest1)t0).f();
  }

  public static void main(String[] args){
      //(new p2.CTest2()).m(new p1.CTest1()); 
      (new p1.CTest1()).g(); 
  }
}


    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • java命名空间javax.lang.model.element枚举modifier的类成员方法: protected定义及介绍
  • 不太理解protected的意思,请大虾帮忙解释一下。
  • java命名空间java.lang.reflect类modifier的类成员方法: protected定义及介绍
  • 请那位给简单讲一下存取修饰符中中default的存取权限(相对于protected)
  • java 类修饰符(private,public和protected)所代表的权限
  • 关于protected modifier的一个疑问
  • protected修饰符为什么不能修饰class?为什么用friendly修饰成员变量时产生错误?
  • 继承一个protected函数,怎样在子类中让它完成父类的功能
  • 请教real mode 和protected mode ,谁能仔细讲讲?
  • 关于private和protected
  • 为什么我无法使用一个类的protected方法。
  • protected 与 package 的存取权限怎么在我看来是一样的?
  • 基于Java protected的深入理解
  • 关于类basic_ostream的构造函数被申明成protected
  • 这个protected的inner class错在哪里?
  • 请教:我给 vmware 安装 tools 时,提示 /dev/cdrom/ is write-protected ,mounting reading only ,各位大哥,我这要怎么改啊?谢谢!
  • C++中的三种继承public,protected,private详细解析
  • 构造函数定义为private或者protected的好处
  • How to create an object of a protected inner class of another package?
  • protected和static关键字的疑惑!
  • 深入理解C++中public、protected及private用法


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3