免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: hncdyjh
打印 上一主题 下一主题

求助:关于java中方法和变量的访问控制 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2006-08-05 00:59 |只看该作者
原帖由 hncdyjh 于 2006-8-4 09:47 发表
(没有a.的)还是属于子类对象的吧。

带a.的方法是属于超类对象的。

这种说法是错误的!

举例:
public class A
{
        protected int p1;
      
        protected static void p2() {}
        protected void p3() { System.println("p3 from super class"); }
        protected void p4() { System.println("p4 from super class"); }
        private void p5() {}
}

public class B extends A
{
        public void p4() { System.println("p4 from sub class"); }
}

public class TestExtends
{
    public static void main(String[] args)
    {
          B classB = new B();
          classB.p3(); //输出 p3 from super class
          classB.p4(); //输出 p4 from sub class
          classB.p5(); //编译错误!由于超类中p5是private的,所以这里编译不能通过。
    }
}

分析:
classB.p3();
classB并没有定义p3(); 但是允许你运行classB.p3()是因为p3是从A继承过来的,所以是超类的方法。运行结果可以看出,输出的仍然是超类中定义的内容。

classB.p4();
虽然超类中定义了p4(),但是如果子类也定义相同signature的方法(即方法名相同,参数相同),即自动覆盖超类中的内容。所以只输出子类的内容,属于子类的方法。

所谓的超类的方法是指子类从超类中继承下来的方法,而不是什么 超类.xxx
所谓子类对超类方法和属性的访问指的是在使用子类时,可以调用子类中并未定义,而在超类/祖先类中定义的方法和属性。
这种访问可以多级继承下去,比如
B extends A
C extends B
D extends C

那么如果A里面定义了一个方法a1();属性为public 或者protected
B, C, D 内部或者实例都可以使用这个a1();
例如
D dclass = new D();
dclass.a1();

[ 本帖最后由 perryhg 于 2006-8-5 17:34 编辑 ]

论坛徽章:
0
12 [报告]
发表于 2006-08-05 12:14 |只看该作者
访问权限        同一个类        同一个包        不同包的子类        不同包的非子类
Private        Y        N        N                       N
Default        Y        Y        N                       N
Protected        Y        Y        Y                       N
Public        Y        Y        Y                       Y

--->刚好前几天总结了下,希望能对你有点帮助

论坛徽章:
0
13 [报告]
发表于 2006-08-05 15:37 |只看该作者
谢谢楼上回答的诸位。

现在基本明白了,java所说的public、protected等“访问控制”实际是指超类的成员(方法或属性)是否可以被子类继承使用。

当超类和子类单独存在时,只有public和“default”两种区别。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP