微科社区,轻松开发从此开始! 请登陆 免费注册

微科社区

当前位置:首页 > Java平台 > J2SE >

protected修饰的成员在子类中怎么不能访问?代码

时间:2014-04-12 09:18  浏览:努力统计中...
packagezpc.databaseTest; publicclassFather{ privateStringname= ; privateinta=12;; protectedvoidtest1(){ System.out.println( name= +name); } publicvoidtest2(){ System.out.println( 2= +test3()); } privateinttest3(){ return2; } } packageTinki

package zpc.databaseTest;
public class Father {
private String name="";
private int a=12;;
protected void test1(){
System.out.println("name="+name);
}

public void test2(){
System.out.println("2="+test3());
}
private int test3(){
return 2;
}
}

package TinkingJava;
import zpc.databaseTest.Father;
public class Son extends Father{
public static void main(String[] args){
Father f=new Father();
f.test1();//test1()是protected的啊

Son s=new Son();
s.test1();//这里不报错
s.test2();
//s.test3();//private的当然不能访问
}

}


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



protected,表示有条件的限制以保护该成员,当您将类别成员定义为protected之后,继承它的类就可以直接使用这些成员,但这些成员仍然受到对象范围的保护,不可被对象直接使用。

对protected而言:Son extends Father,在子类Son的作用范围内,只能调用Son定义的对象的protected方法(即该方法从父类Father中继承而来);
而不能调用Father类对象的protected 方法:Father f = new Father();

你确定是方法报错?

把LZ的代码拷贝到本地测试通过,只是类所在的包不同,没报错,还是把 错误拷贝出来看下。


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

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

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

权限问题,其它包不可以用!




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

这个问题好。不是需求,只是实验


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


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

子类能调用test1()是因为子类有test1方法且在访问权限内, 父类不能调用是因为不在访问权限内!

你帖子的问题跟你代码表达的疑惑完全没关系,所以你基本概念没弄清楚

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


 protected void test1(){
        System.out.println("name=");
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线------