java - 比较 Object 父类(super class)包和 Object 包

标签 java inheritance package superclass

我正在尝试检查一个对象是否在同一包中具有父类(super class)。

我做了下面的例子

Vehicle.java

package myPackage;

public class Vehicle {
    public Vehicle(){}
}

Car.java

package myPackage;

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

}

Main.java

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 }

主程序的输出如下

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

如您所见,c.getClass()[Main.16] 采用类 Class 的父类(super class),即 java.lang 这是非常明显的。我想将“myPackage”作为父类(super class)。我该怎么做?

最佳答案

当您应该调用c.getPackage()时,您却调用了c.getClass().getPackage()c 已经是父类(super class) - 它是一个 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())

关于java - 比较 Object 父类(super class)包和 Object 包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28234036/

相关文章:

Java包运行时错误

java - 发送数据报包时,数据包的数据是重复的。 (java)

c++ - 从子类中的线程调用纯虚函数抛出异常

javascript - 如何在 ES6 中无需使用 super 来扩展类?

node.js - 错误 : ENOENT, 统计 'C:\Users\Ali\AppData\Roaming\npm'

laravel - 如何重写 Laravel 包函数

java - 更新类的Jpanel

java - 如何在 JOOQ 中将 Record 转换为 Table Record?

java - 为什么要指定@Column( nullable = false )?

c++ - 继承构造函数的字符和访问级别