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();//为什么这个地方不可以访问,编译没有通过。
}
}
解决方案 »
- 请问,下面这句代码执行后,产生的结果是什么?(看似简单,实则不简单)
- 用JAVA可以开发 网络游戏的外挂吗 比如 自动打怪 自动吃药
- 谁能帮我? 初学java 添加Dialog的问题
- 有谁可以告诉我这个程序的问题,帮帮忙
- 关于文件操作的简单问题!!!
- 有用过反汇编的帮我看下!
- 菜鸟问题,快来抢分啊!!!!怎么将一个InputStream流转换成BufferedReader流?
- sun的Creator studio真是强
- 大家援助一下呀!!!前贴《100分求教jtable问题???(lhdjk ) 》100分我一定落实
- Java里怎么生成一个月历,将一个月的日期显示出来,并且按星期来显示?
- 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的时候才发现前面的知识点没掌握好,我认真看看。感谢所有回答我问题的朋友们。