有一个类
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();
}
}
区别在哪里?
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的客户直接访问吧,是直接访问,
尽可能地防止误用而产生的错误,就需要用到这些