package package1;public class Class1 {
public Class1(){
System.out.println("sss");
}
protected void f1(){
System.out.println("f1");
}
}
这是第一个包里的一个类,其中一个是构造函数,还有一个是保护的函数package package2;
import package1.Class1;
public class Class2 extends Class1{
public static void main(String args[]){
Class1 c1=new Class1();
c1.f1();
}
}
这是另外一个包,其中一个类继承上面一个包中的一个类,按理来说应该是对的,
为什么eclipse老说f1()被隐藏了呢~~我很不解,初学java,可能哪儿疏忽了,
大家指教~
public Class1(){
System.out.println("sss");
}
protected void f1(){
System.out.println("f1");
}
}
这是第一个包里的一个类,其中一个是构造函数,还有一个是保护的函数package package2;
import package1.Class1;
public class Class2 extends Class1{
public static void main(String args[]){
Class1 c1=new Class1();
c1.f1();
}
}
这是另外一个包,其中一个类继承上面一个包中的一个类,按理来说应该是对的,
为什么eclipse老说f1()被隐藏了呢~~我很不解,初学java,可能哪儿疏忽了,
大家指教~
Class2 c2 = new Class2();
c2.f1();
这样就可以调用了。
保护型(protected)变量 (允许被其归属的类,由此类派生的子类以及同一包中的其他类访问)
你的class1 和calss2不同包
System.out.println("f1");
}既然使用了protected,就说明这个方法的使用范围就是他的子类和pakage1这个包中的其他类,
你换到其他的包里去调用这个方法自然就相对时隐藏的看不到的啦
}
这是另外一个包,其中一个类继承上面一个包中的一个类,按理来说应该是对的,
[/Quote]
你的这个类应该是包外的类。
在不同包的时候,子类可以访问父类的protected修饰的成员变量和方法。
这句话的含义是可以用子类的对象访问父类的成员变量或者方法,但是不能用父类的对象访问。public class Class2 extends Class1 { public static void main(String[] args) {
Class1 c1 = new Class1();
//c1.f1(); The method f1() from the type Class1 is not visible
Class2 c2 = new Class2();
c2.f1();
}
}
public void test() {
f1();
}你在一个静态方法里,访问另一个package的protected方法,当然被拒绝了。
因为静态方法不存在什么继承的问题。
所以,你只能在类的方法里,直接使用f1(),而不能使用如下的代码
public void test() {
Class1 c1 = new Class1();
c1.f1();
}
如果是new一个,我们还要继承干嘛呢?呵呵!