本人今天在课堂上吃瘪了,有个修饰符protected问题老师说得不是太清楚,之后大家一起讨论也没个结果,因为是远程视频,所以没办法向老师问个明白,希望各位能帮我彻底弄明白,小弟感激之尽
如果赶时间,直接看第3个程序,很简单的一个问题,只是我没弄明白package creazy;public class TestP {//基类
protected static int i = 8;
protected int j = 3;}
package creazy;public class TestP_one {//同一个包中调用,没有问题,很清楚,可以不看了
public static void main(String[] args)
{
TestP one = new TestP();
System.out.println(TestP.i);
System.out.println(one.j);
}}//不同包中的子类调用,在protected的访问权限内,应该没问题的,结果出问题了,傻了,
//讨论了半天,总结出碰到static就用A计划,没碰到就用B计划,崩溃,只好发到网上请教
package jdbc;import creazy.TestP;public class TestP_two extends TestP{
public static void main(String[] args)
{
TestP two = new TestP();
System.out.println(TestP.i);//1,这个可以用基类调用哪个protected成员,
//可以看到去掉extends后就不能调用。
System.out.println(two.j);//2,报错了,不能直接用基类调用protected成员,这个我知道,
//可是为什么上面的可以用基类调用static成员,
//而这个却不行
TestP_two three = new TestP_two();
System.out.println(three.j);//子类可以调用protected成员
}}
总结:protected修饰的成员可以用子类来调用
问题:1,为什么protected static修饰的成员可以直接用基类调用。请教各位大大说清楚,可以一直把这个归结到一个Java基本规则为止,谢谢
2,为什么protected修饰的成员只能通过子类来调用。请教各位大大说清楚,说出来的道理能够不和问题1发生冲突,谢谢
如果赶时间,直接看第3个程序,很简单的一个问题,只是我没弄明白package creazy;public class TestP {//基类
protected static int i = 8;
protected int j = 3;}
package creazy;public class TestP_one {//同一个包中调用,没有问题,很清楚,可以不看了
public static void main(String[] args)
{
TestP one = new TestP();
System.out.println(TestP.i);
System.out.println(one.j);
}}//不同包中的子类调用,在protected的访问权限内,应该没问题的,结果出问题了,傻了,
//讨论了半天,总结出碰到static就用A计划,没碰到就用B计划,崩溃,只好发到网上请教
package jdbc;import creazy.TestP;public class TestP_two extends TestP{
public static void main(String[] args)
{
TestP two = new TestP();
System.out.println(TestP.i);//1,这个可以用基类调用哪个protected成员,
//可以看到去掉extends后就不能调用。
System.out.println(two.j);//2,报错了,不能直接用基类调用protected成员,这个我知道,
//可是为什么上面的可以用基类调用static成员,
//而这个却不行
TestP_two three = new TestP_two();
System.out.println(three.j);//子类可以调用protected成员
}}
总结:protected修饰的成员可以用子类来调用
问题:1,为什么protected static修饰的成员可以直接用基类调用。请教各位大大说清楚,可以一直把这个归结到一个Java基本规则为止,谢谢
2,为什么protected修饰的成员只能通过子类来调用。请教各位大大说清楚,说出来的道理能够不和问题1发生冲突,谢谢
解决方案 »
- 请教高手~~
- Swing编程,如何实现窗体的打开和关闭!
- 求助 两个 数组 差集 ,或交集
- UltraEdit用于调试java,Ctrl+Shift+0快捷键被输入法占用了,如何改变javac等命令的快捷键?
- 有谁用过style report,谈谈感受
- 求助:java.net.SocketException: ReadFile failed: 指定的网络名不再可用错误
- java.lang.NullPointerException 在jsp中
- java 如何将二进制转64进制
- 如何制作软件的安装序列号? (windows版本、unix版本)???(高分求助!)
- java的配置问题
- socket 问题??请教了
- 关于for 循环的问题
protected int j = 3; 对象属性 子类可以访问,不同包就不行。
应该是这样
//可以看到去掉extends后就不能调用。
i是基类中的静态成员变量,属于类变量,可以直接调用!!!
如果有不同package的类想调用它们,那么这个类必须是定义它们的类的子类,要注意的是在子类中必需通过子类对象调用它们,不能通过定义它们自身来使用,因为它们对另一个package来说是隐藏的。
问题2,只能通过子类来调用,为什么?
protected static int i = 8;
protected int j = 3;
public static void main(String[] args)
{
TestP MyTestP=new TestP();
System.out.println(MyTestP.j);//本类对象可以随意访问这个变量,修饰符protect仅仅是限制别的类对象对它的访问,例如你的第三个类对象}}
还有个小细节没搞清楚:在别的package中导入这个类,就能够new出这个类的对象,那么这个对象访问自家的属性为什么就行不通了呢,课堂上那位老师只说了子类能够调用,可是没说基类的对象为什么就不能调用自家的东西了