//package com.antiy;
abstract class animal {
public abstract void eat();
public abstract void run();
}
class human extends animal {
human(){}
public void eat(){
System.out.println("Human eat");
}
public void run(){
System.out.println("Human run");
}
}
public class Hello {
public static void main(String[] args){
System.out.println("Hello");
human o1 = new human();
Hello.do_eat(o1);
}
static void do_eat(animal o){
o.eat();
}
}
在Hello.java中包含如上代码,编译和运行都正常:
wangbo@wangbodeMBP:/tmp/java_project$ cat Hello.java
//package com.antiy;
abstract class animal {
public abstract void eat();
public abstract void run();
}
class human extends animal {
human(){}
public void eat(){
System.out.println("Human eat");
}
public void run(){
System.out.println("Human run");
}
}
public class Hello {
public static void main(String[] args){
System.out.println("Hello");
human o1 = new human();
Hello.do_eat(o1);
}
static void do_eat(animal o){
o.eat();
}
}
wangbo@wangbodeMBP:/tmp/java_project$ javac Hello.java
wangbo@wangbodeMBP:/tmp/java_project$ java Hello
Hello
Human eat
如果把package放开,编译没有问题,运行会提示human类找不到:
wangbo@wangbodeMBP:/tmp/java_project$ cat Hello.java
package com.antiy;
abstract class animal {
public abstract void eat();
public abstract void run();
}
class human extends animal {
human(){}
public void eat(){
System.out.println("Human eat");
}
public void run(){
System.out.println("Human run");
}
}
public class Hello {
public static void main(String[] args){
System.out.println("Hello");
human o1 = new human();
Hello.do_eat(o1);
}
static void do_eat(animal o){
o.eat();
}
}
wangbo@wangbodeMBP:/tmp/java_project$ javac Hello.java
wangbo@wangbodeMBP:/tmp/java_project$ cp Hello.class com/antiy/
wangbo@wangbodeMBP:/tmp/java_project$ java com/antiy/Hello
错误: 无法初始化主类 com.antiy.Hello
原因: java.lang.NoClassDefFoundError: com/antiy/animal
如果把package放开,把human相关的代码注释掉也可以正常运行:
wangbo@wangbodeMBP:/tmp/java_project$ cat Hello.java
package com.antiy;
abstract class animal {
public abstract void eat();
public abstract void run();
}
class human extends animal {
human(){}
public void eat(){
System.out.println("Human eat");
}
public void run(){
System.out.println("Human run");
}
}
public class Hello {
public static void main(String[] args){
System.out.println("Hello");
//human o1 = new human();
//Hello.do_eat(o1);
}
static void do_eat(animal o){
o.eat();
}
}
wangbo@wangbodeMBP:/tmp/java_project$ javac Hello.java
wangbo@wangbodeMBP:/tmp/java_project$ cp Hello.class com/antiy/
wangbo@wangbodeMBP:/tmp/java_project$ java com/antiy/Hello
Hello
我知道优雅的java工程不会把两个类放在一个java文件中,但是两个类放在一个java文件系统也可以支持
我的疑惑是如上代码,如果放开package为什么runtime会提示human类找不到 ?