Java 比较对象超类包与对象包

Java 比较对象超类包与对象包,java,inheritance,package,superclass,Java,Inheritance,Package,Superclass,我试图检查一个对象在同一个包中是否有超类 我举了下面的例子 Vehicle.java package myPackage; public class Vehicle { public Vehicle(){} } package myPackage; public class Car extends Vehicle{ public Car(){ super(); } } 1 package myPackage; 2 3 public class M

我试图检查一个对象在同一个包中是否有超类

我举了下面的例子

Vehicle.java

package myPackage;

public class Vehicle {
    public Vehicle(){}
}
package myPackage;

public class Car extends Vehicle{
    public Car(){
        super();
    }

}
1 package myPackage;
2
3 public class Main {
4
5    public static void main(String[] args){
6       Vehicle v = new Car();
7       hasSuperInSamePackage(v);
8    }
9
10   public static boolean hasSuperInSamePackage(Object o) {
11      boolean b = false;
12      if ((o.getClass().getSuperclass()) != null) {
13      
14          Class c = o.getClass().getSuperclass();
15          Package objectPackage = o.getClass().getPackage();
16          Package superPackage = c.getClass().getPackage();
17          System.out.println("--begin--");
18          System.out.println("Object: " + o.toString());
19          System.out.println("objectPackageName: " + objectPackage.getName());
20          System.out.println("Super: " + c.toString());
21          System.out.println("superPackageName: " + superPackage.getName());
22          System.out.println("---end---");
23  
24          b = (superPackage.getName().equals(objectPackage.getName()));
25     }
26     return b;
27   }
28 }
Car.java

package myPackage;

public class Vehicle {
    public Vehicle(){}
}
package myPackage;

public class Car extends Vehicle{
    public Car(){
        super();
    }

}
1 package myPackage;
2
3 public class Main {
4
5    public static void main(String[] args){
6       Vehicle v = new Car();
7       hasSuperInSamePackage(v);
8    }
9
10   public static boolean hasSuperInSamePackage(Object o) {
11      boolean b = false;
12      if ((o.getClass().getSuperclass()) != null) {
13      
14          Class c = o.getClass().getSuperclass();
15          Package objectPackage = o.getClass().getPackage();
16          Package superPackage = c.getClass().getPackage();
17          System.out.println("--begin--");
18          System.out.println("Object: " + o.toString());
19          System.out.println("objectPackageName: " + objectPackage.getName());
20          System.out.println("Super: " + c.toString());
21          System.out.println("superPackageName: " + superPackage.getName());
22          System.out.println("---end---");
23  
24          b = (superPackage.getName().equals(objectPackage.getName()));
25     }
26     return b;
27   }
28 }
Main.java

package myPackage;

public class Vehicle {
    public Vehicle(){}
}
package myPackage;

public class Car extends Vehicle{
    public Car(){
        super();
    }

}
1 package myPackage;
2
3 public class Main {
4
5    public static void main(String[] args){
6       Vehicle v = new Car();
7       hasSuperInSamePackage(v);
8    }
9
10   public static boolean hasSuperInSamePackage(Object o) {
11      boolean b = false;
12      if ((o.getClass().getSuperclass()) != null) {
13      
14          Class c = o.getClass().getSuperclass();
15          Package objectPackage = o.getClass().getPackage();
16          Package superPackage = c.getClass().getPackage();
17          System.out.println("--begin--");
18          System.out.println("Object: " + o.toString());
19          System.out.println("objectPackageName: " + objectPackage.getName());
20          System.out.println("Super: " + c.toString());
21          System.out.println("superPackageName: " + superPackage.getName());
22          System.out.println("---end---");
23  
24          b = (superPackage.getName().equals(objectPackage.getName()));
25     }
26     return b;
27   }
28 }
main的输出如下所示

--begin--
Object: myPackage.Car@7852e922
objectPackageName: myPackage
Super: myPackage.Vehicle
superPackageName: java.lang
---end---

正如您所看到的,
c.getClass()
[Main.16]采用了类
class
的超类,即
java.lang
,这一点非常明显。我想把“myPackage”作为超类。如何执行此操作?

当您应该调用
c.getPackage()
时,您正在调用
c.getClass().getPackage()
c
已经是超类了,它是一个
Class
,因此在它上面调用
getClass()
只会给你
Class.Class
,这不是你想要的

我会尽量保持一致,比如:

Class objectClass = o.getClass();
Class superClass = thisClass.getSuperclass();
Package objectPackage = objectClass.getPackage();
Package superPackage = superClass.getPackage();
System.out.println("--begin--");
System.out.println("Object: " + objectClass);
System.out.println("objectPackageName: " + objectPackage.getName());
System.out.println("Super: " + superClass);
System.out.println("superPackageName: " + superPackage.getName())

非常感谢您的快速回答。你的建议是正确的:)我也可以做
b=(objectPackage=superPackage)用于比较,因为它是同一个类,或者这些对象存储为两个独立的对象?