Java 比较对象超类包与对象包
我试图检查一个对象在同一个包中是否有超类 我举了下面的例子 Vehicle.javaJava 比较对象超类包与对象包,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
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)代码>用于比较,因为它是同一个类,或者这些对象存储为两个独立的对象?