java继承找不到父类的一个问题父类:public class Person {protected int i 100}子类:package mpublic
java继承找不到父类的一个问题 父类:public class Person { protected int i = 100; } 子类:package m; public class Person1 extends Person { public void method() { System.out.println(i); } } 本来是想验证protected型的成员变量可以被子类访问,但我在Person.java和Person1.java所在的路径D:\java\TestAccess\me下javac Person1.java后总是提示找不到Person符号。也找不到i这个符号。但是我要不把Person1打包,即不写package m;则编译javac Person1.java就可通过,一写package m;则编译就不通过。请大神们指教![最优解释] 我看网上介绍,jdk1.4以后,不支持无包名类(或叫默认包)的导入了。 那么在你有包名的类里,无法使用无包名的类。 http://www.189works.com/article-69990-1.html http://soft.zdnet.com.cn/software_zone/2009/1217/1562644.shtml[其他解释] 要将Person类引进来[其他解释]
public class Person { protected int i = 100; } 由于父类中你没有指定package,即Person类的原始码(Person.java)在D:\java\TestAccess\me目录下
package m; public class Person1 extends Person { public void method() { System.out.println(i); } } 子类中你指定了package m,即Person1类的原始码在D:\java\TestAccess\me\m 目录下
所以在me目录下javac Person1.java会出现编译错误,所以要import Person类的完全吻合名称
[其他解释] 这是java 中修饰符的问题,这样改一下代码就行了,没有必要定义在两个包下,
修饰符范围你可以看一下这个:http://blog.csdn.net/zhaoming262350/article/details/7907749
class Person
{
protected int i = 100;
}
public class Person1 extends Person
{
public static void main(String [] args)
{
Person1 p1 = new Person1();
System.out.println(p1.i);
}
public void method()
{
System.out.println(i);
}
}
[其他解释] 如果你写package m;那么你应该在m的上一级目录(也就是m所在的那个目录)运行:
javac m\Person1.java
如果你有extends,那么你还必须指定classpath
[其他解释] 引用: 引用:希望大家伙帮忙看看问题出在哪了…… 我建了m文件夹,上一级目录为D:\java\TestAccess\me。按照您说的javac \m\Person1.java,并指定了classpath,添加上了D:\java\TestAccess\me(因为Person.class就位于D:\java\TestAccess\me下),在…… 注意,Person是带package me的,所以classpath是D:\java\TestAccess,而不是D:\java\TestAccess\me
另外,如果Person和Person1不在同个package下,Person1需要import me.Person
[其他解释] 2楼,要想import Person的一个完全吻合名称怎么导呀,关键是Person类是裸体类呢,不知道怎么导,还有,我觉得即便为package m,Person1.java也不一定非得放在D:\java\TestAccess\me\m下的,在D:\java\TestAccess\me\下直接编译也能成功吧……
[其他解释] 我在当前路径D:\java\TestAccess\me下直接编译javac Person1.java 而现在Person.class也在D:\java\TestAccess\me下,所以按理说应该可以直接找到Person.class,问题就出在把Person1.java放进了一个包中就找不到Person类了。
[其他解释] 希望大家伙帮忙看看问题出在哪了……
[其他解释] 引用: 希望大家伙帮忙看看问题出在哪了…… 我建了m文件夹,上一级目录为D:\java\TestAccess\me。按照您说的javac \m\Person1.java,并指定了classpath,添加上了D:\java\TestAccess\me(因为Person.class就位于D:\java\TestAccess\me下),在D:\java\TestAccess\me下运行javac m\Person1.java,但还是提示找不到符号呀
[其他解释] 现在的问题是为什么子类一打上个包,而父类不打包,就找不到父类了呀,做了好多实验,如果子类和父类同打入一个包中,则编译会通过,但打入不同的包,只要在子类中引入父类所在的包就可。但现在我蛋疼的让父类为裸体类,让子类放入一个包中,这样一来子类就找不到父类了……不知道为什么呢……[其他解释] 这些都是正确的,通过了才无语了。 protected 修饰的变量的访问权限是 “同包下的子类才可访问”[其他解释]
引用: 这些都是正确的,通过了才无语了。 protected 修饰的变量的访问权限是 “同包下的子类才可访问” protected的权限是同一个类内部,同一个包,或者是其子类,并不是同包下的子类嘿嘿……
[其他解释] 引用: 引用: 引用:希望大家伙帮忙看看问题出在哪了…… 我建了m文件夹,上一级目录为D:\java\TestAccess\me。按照您说的javac \m\Person1.java,并指定了classpath,添加上了D:\java\TestAccess\me(因为Person.class就位于D:\java\TestA…… 我javac所在的路径就是D:\java\TestAccess\me,在这个路径下有Person.class和Person1.java,为什么说Person这个父类还在包me中呢,为什么不认为在包\java\TestAccess\me中呢,不解呀。
[其他解释] 请先编译Person.java
[其他解释] 如果实在不行,在编译的时候请指定classpath
[其他解释] 亲们,最后经我的测试,真的非默认包的类无法引入默认包的类,得把默认包的类放入一个包中才行呢。就这样吧
[其他解释] 引用: 我看网上介绍,jdk1.4以后,不支持无包名类(或叫默认包)的导入了。 那么在你有包名的类里,无法使用无包名的类。 http://www.189works.com/article-69990-1.html http://soft.zdnet.com.cn/software_zone/2009/1217/1562644.shtml 我也是觉得这样,因为我把父类person.java放入一个包内,再在子类导入父类便可通过,但如果父类不写package,则在子类中总提示无法找到父类Person。