子类访问父类 权限问题

不啃不舒服斯基 2009-11-10 09:38:51
父类:
package com.p1;

public class cat {
protected void cry() {
}
}

子类:
package com.p2;
import com.p1.cat;
public class tiger extends cat {
public static void main(String[] args) {
new cat().cry()
}
}


子类运行会有什么问题?
...全文
445 30 打赏 收藏 转发到动态 举报
写回复
用AI写文章
30 条回复
切换为时间正序
请发表友善的回复…
发表回复
ctlu2ct2t 2009-11-13
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 whut0802 的回复:]
作用域  当前类 同一包内 子孙类 其他包
public    √    √      √    √
protected √    √      √    ×
default  √    √      ×    ×
private  √    ×      ×      ×
首先你的cry()方法是protected修饰的,所以在另外一个包中是无法访问到这个方法的。具体的访问权限见上表,不要想的太复杂,就这么简单。
[/Quote]

顶这个!复习了!
howardhewang 2009-11-13
  • 打赏
  • 举报
回复
这个问题很简单嘛
haixuelang 2009-11-13
  • 打赏
  • 举报
回复
[Quote=引用 26 楼 xlchou 的回复:]
引用 21 楼 fskjb01 的回复:
这里跟继承没有关系,你只是new了一只CAT而已,cry说protected的当然访问不到啦。不要因为再子类里面的main方法里new了一个父类就是继承,那里有!!!!


正解!
[/Quote]
对。
designedIt 2009-11-13
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 goldenfish1919 的回复:]
new tiger().cry();是可以运行的。
子类可以继承不在同一个包里面的父类的protected方法和变量,但是继承了以后,只能用子类的引用来访问,而不能使用父类的引用来访问,因为不同包里面的protected是不可见的,而继承了以后就是自己的了
[/Quote]
只能用子类的引用来访问吗?
看下边代码:

package com.p2;
import com.p1.*;
public class Tiger extends Cat {

void f()
{
super.cry(); //错误吗?

}
static void g()
{
new Cat().cry(); //错误吗?
new Tiger().cry(); //错误吗?
}



}


上边的super.cry(); 就不是:只能用子类的引用来访问。这有错误吗?
qhgxinxing 2009-11-12
  • 打赏
  • 举报
回复
new cat().cry() 这句代码其实跟继承是没有关系的 cry() 有protected修饰 要想访问 这个类要跟cat位于同一个包中才可以
lujinke 2009-11-12
  • 打赏
  • 举报
回复
不用等到运行,编译就通不过
[Quote=引用楼主 derline 的回复:]
父类:Java codepackage com.p1;publicclass cat {protectedvoid cry() {
}
}
子类:Java codepackage com.p2;import com.p1.cat;publicclass tigerextends cat {publicstaticvoid main(String[] args) {new cat().cry()
}
}

子类运行会有什么问题?
[/Quote]
tianzishuode4 2009-11-12
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 libo_java 的回复:]
简单的说 protected 修饰符 是可以被同一个包中的子类访问。 楼主的程序 子类和父类在不同的包下,所以是不可以访问 父类的protected方法的。
[/Quote]
其实是可以被其它包中的子类访问的
tfsict2008 2009-11-12
  • 打赏
  • 举报
回复
不同包中的子类可以看见父类的Proteced方法,指的是不同包中的子类可以继承父类的proteced方法,并不是说你可以用父类的引用去调用父类的proteced方法。
xlchou 2009-11-12
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 fskjb01 的回复:]
这里跟继承没有关系,你只是new了一只CAT而已,cry说protected的当然访问不到啦。不要因为再子类里面的main方法里new了一个父类就是继承,那里有!!!!
[/Quote]

正解!
guodong66 2009-11-11
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 whut0802 的回复:]
作用域  当前类 同一包内 子孙类 其他包
public    √    √      √    √
protected √    √      √    ×
default  √    √      ×    ×
private  √    ×      ×      ×
首先你的cry()方法是protected修饰的,所以在另外一个包中是无法访问到这个方法的。具体的访问权限见上表,不要想的太复杂,就这么简单。
[/Quote]

正解 , 继承访问权限需要在同一个包下边。
simon_1 2009-11-11
  • 打赏
  • 举报
回复
new cat().cry();
这个写法是可以的。
fskjb01 2009-11-11
  • 打赏
  • 举报
回复
这里跟继承没有关系,你只是new了一只CAT而已,cry说protected的当然访问不到啦。不要因为再子类里面的main方法里new了一个父类就是继承,那里有!!!!
zuomingyu2 2009-11-11
  • 打赏
  • 举报
回复
被隐藏了
huangdh12 2009-11-11
  • 打赏
  • 举报
回复
在main方法里面调用,跟子类父类没什么关系啊
sn348806182 2009-11-11
  • 打赏
  • 举报
回复
学习了
若鱼1919 2009-11-11
  • 打赏
  • 举报
回复
new tiger().cry();是可以运行的。
子类可以继承不在同一个包里面的父类的protected方法和变量,但是继承了以后,只能用子类的引用来访问,而不能使用父类的引用来访问,因为不同包里面的protected是不可见的,而继承了以后就是自己的了
libo_java 2009-11-11
  • 打赏
  • 举报
回复
简单的说 protected 修饰符 是可以被同一个包中的子类访问。 楼主的程序 子类和父类在不同的包下,所以是不可以访问 父类的protected方法的。
whut0802 2009-11-11
  • 打赏
  • 举报
回复
作用域 当前类 同一包内 子孙类 其他包
public √ √ √ √
protected √ √ √ ×
default √ √ × ×
private √ × × ×
首先你的cry()方法是protected修饰的,所以在另外一个包中是无法访问到这个方法的。具体的访问权限见上表,不要想的太复杂,就这么简单。
scarjia 2009-11-10
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 nbe01 的回复:]
new cat().cry()
代码可以这么用吗?? 不用定义一个新的函数名字 直接 申请空间??
[/Quote]

首先更正一下,1、在java中一般不说什么什么函数的,都叫方法;2、定义的也不是叫函数名,而是叫对象名或叫变量名,因为这些都是存在stack中的,而你说的函数也就是方法是在code segment中的,方法不调用,就是一段没有用和代码,只有方法调用了才起到作用,学好java的最好方法就是分析好内存,可以自己给自己补点计算机专业的一本天书———编译原理,对学java有用。
其次,回答您的问题,不用定义这是可以的,如果你定义了一个变量名(对象名)就是在stack中申请了一个内存空间用来指向heap中的new出来的Cat对象,如果不定义,就是直接在heap中new一个Cat类的对象,而没有引用指向它,两种最后都是这个new出来的对象
end
  • 打赏
  • 举报
回复
嗯,代码格式下次注意,现在不能修改了。
加载更多回复(10)

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧