package z;
public class M {
protected void f() { }
}
package zz;
import z.M;
public class N extends M{
public static void main(String[] args) {
new N().f();//为什么这个地方可以访问
}
}
package zz;
import z.M;
public class R{
public static void main(String[] args) {
new N().f();//为什么这个地方不可以访问,编译没有通过。
}
}
public class M {
protected void f() { }
}
package zz;
import z.M;
public class N extends M{
public static void main(String[] args) {
new N().f();//为什么这个地方可以访问
}
}
package zz;
import z.M;
public class R{
public static void main(String[] args) {
new N().f();//为什么这个地方不可以访问,编译没有通过。
}
}
解决方案 »
- Dialog对象问题
- 我Java中用SQL语句删除access数据库的记录,为什么用access打开时记录还在?
- JAVA 锁表
- java 关于解压rar文件 代码有点问题 帮改正--请进
- 谁可以告诉我下这段代码是什么意思啊 ?
- 关于正则表达式 算法
- JDK设置问题.我已经查过很多,可还是没法解决.请客位看看!
- 跪求思路:用ie捕获并实时显示银行摄相头的监控视频
- 数组错误 Invalid digit (valid ones are 0..9)
- 请问学习oracle8,还是学习oracle8i好呢?学习oracle应打下哪些基础.应看什么书?
- default控制符的使用
- 这样的sql如何完成。。求助
f()是在z.N类中声明的,所有说法都是相对于z这个包来说的
你可以把Protected换在public就可访问。。
我再加一句你看看:
package zz;
import z.M;
public class N extends M{
public static void main(String[] args) {
new N().f();//为什么这个地方可以访问
new M().f();//编译不能通过,因为在不同的包里子类可以继承父类的东西但不能访问。
}
}
import z.M;
public class R extends N{//已经改为继承
public static void main(String[] args) {
new N().f();//编译还是没通过。
}
}
你调用的是父类的方法,当在子类调用父类的方法时 直接用super.f() 就出来了 只限在当前的方法中而不是在main函数中
再说回去 那不是继承的问题 是仿问修饰符的问题
package com.pyh.demo1; //注意这个包的路径,demo1
public class M {
protected void foo() { //protected访问权限,同包,子类可以访问
System.out.println("M:-->foo");
}
}package com.pyh.demo2; //此包与父类不同包,demo2
import com.pyh.demo1.M; //引入父类的包
public class N extends M { //继承父类
public static void main(String[] args) {
new N().foo(); //父类的foo()是protected访问权限,允许同包和子类访问,这里不会报错
}
}
package com.pyh.demo1; //注意此包,与M类是同包
import com.pyh.demo2.N;
public class R {
public static void main(String[] args) {
new N().foo(); //所以这里也不会报错
}
}
package com.pyh.demo2; //此包与M类不同包
public class R {
public static void main(String[] args) {
new N().foo(); //所以这里会报错,找不到方法
}
}
希望你能看的懂。
protected是继承访问权限修饰符,我不懂你说的“那不是继承问题 是访问修饰符的问题”
我对protected的理解:在不同的包里,子类可以继承父类的东西,但是不能访问父对象的东西。举例:
package z;
public class M {
protected void f() { }
}package zz;
import z.M;
public class N extends M{
public void nf(){
f();//这是继承过来的方法,编译通过
new M().f();//这是访问父类对象的方法,不能访问,编译错误
}
}
----------------------------------------------------------------------------------
实际上虚线上面的我都是懂的,但是我开始提出的那个问题,我自己不太懂。我可能我自己说的不太清楚。
最后一个代码片段中,如果R继承了N,为什么还是会报错呢?
真正的含义是:
1. 同包中的类可以构造该类或者该类的子类,然后用构造出的实例调用protected方法。
2. 子类可以构造自己的实例,并通过实例调用protected方法。
http://www.cnblogs.com/AllenChen/archive/2010/06/30/1768218.html
实际上我提出的这个问题正是由这个clone()这个方法引出来的,在学clone的时候才发现前面的知识点没掌握好,我认真看看。感谢所有回答我问题的朋友们。