有一个类
package family;
public class Student {
protected void tt(){
System.out.println("I am a student...");
}
} 另一个类,
这样可以:
package temp;public class Doctor extends family.Student{
void ss(){
tt();
}
}
这样就不行:
package temp;public class Doctor extends family.Student{
void ss(){
new family.Student().tt();
}
}
区别在哪里?
package family;
public class Student {
protected void tt(){
System.out.println("I am a student...");
}
} 另一个类,
这样可以:
package temp;public class Doctor extends family.Student{
void ss(){
tt();
}
}
这样就不行:
package temp;public class Doctor extends family.Student{
void ss(){
new family.Student().tt();
}
}
区别在哪里?
解决方案 »
- 深夜分享一个Java写的为图片添加水印的软件(含源代码)(小小菜鸟)
- 请问怎么缩放JtabbedPanel标题上的图标?
- Java 移植性的问题
- ******************java当中如何在控制台中实现清屏的功能,
- 高手请进:求教servlet中的session和多线程问题
- protected修饰的成员在子类中怎么不能访问?代码如下
- 北京华胜鸣天科技有限公司怎么样,明天去面试,给点意见,如果谁能告诉一些笔试题我会挥分如土的。
- Java帮助的下载
- 菜鸟问题:请问jar是干什么用的,怎么用?
- 菜鸟问题:在Java中如何接收从键盘输入的字符串?
- 文件拷贝,重现重复内容怎么办
- 关于编译器中关键字变色的问题
new family.Student().tt();表示新建包外的Student示例,这是就找不到tt()方法了。另外tt();是一个实例
new family.Student().tt();就是两个实例了
作用域 当前类 同一package 子孙类 其他package
public √ √ √ √
protected √ √ √ ×
friendly √ √ × ×
private √ × × × 你的这个程序就是--不同package 访问 protected方法(tt()方法)是X 就是不行的意思
应该是没问题的 可能是他看错了吧
new family.Student 这是个Student()的实例,然后调用它的tt()的方法(new family.Student()).tt();
new family.Student 这是个Student()的实例,然后调用它的tt()的方法(new family.Student()).tt();
应当是
new family.Student()这是个Student的实例,......呵呵 春节愉快
由于你重新new了一下创建了一个新的对象,由于不在同一个包内,你不能够调用他的protected方法
而你继承则能够调用protected方法
因为当你创建个类时,希望在此包中任何类和它的子类中应用某个方法,而不希望其它包中任何一个类调用它时就需要用到protected关键字了。
我想lz提出的问题,如果不是某个考试题目的话,就应该是楼主没有能够很好的理解继承。
package temp;public class Doctor extends family.Student{
void ss(){
new family.Student().tt();
}
}这里虽然是在子类中,但非访问它们的代码所实现的对象,应该是Doctor,而非Student至于为什么是这样?我想初步的可能就是为了防止使用Student的客户直接访问吧,是直接访问,
尽可能地防止误用而产生的错误,就需要用到这些