java 从实现的对象上调用父对象的方法 class
java call method from parent on object from implemented class
我相信这很容易。我有一个名为 vInteger
的 java class,它扩展了 class Integer
(仅包含 int
值、构造函数、getter ) 并实施 class Comparing
。那个有一个抽象方法 compare(Comparing obj);
,我在 class vInteger
中实现了它。但是,我无法从 Integer
class 调用 getter 来获取 int
值。
这里有什么问题? :)
谢谢
如果您看到整数 class 那么它是
public final class Integer extends Number implements Comparable<Integer>
你不能扩展 class 因为它是最终的
我同意Mukesh Kumar。
和
你能试试下面的代码吗?
public class VInteger extends Number implements Comparable<Integer> {
我假设您指的是自定义 Integer
class(这不是个好主意,顺便说一句,因为它会隐藏 java.lang.Integer
,所以重命名会更安全它)。
现在,您的 class 看起来像这样(根据您的描述):
public class vInteger extends Integer implements Comparing
{
...
public int compare(Comparing obj)
{
// here you can access this.getIntValue() (the getter of your Integer class)
// however, obj.getIntValue() wouldn't work, since `obj` can be of any
// class that implements `Comparing`. It doesn't have to be a sub-class of
// your Integer class. In order to access the int value of `obj`, you must
// first test if it's actually an Integer and if so, cast it to Integer
if (obj instanceof Integer) {
Integer oint = (Integer) obj;
// now you can do something with oint.getIntValue()
}
}
...
}
P.S.,更好的解决方案是使用通用比较接口:
public interface Comparing<T>
{
public int compare (T obj);
}
public class vInteger extends Integer implements Comparing<vInteger>
{
public int compare (vInteger obj)
{
// now you can access obj.getIntValue() without any casting
}
}
我相信这很容易。我有一个名为 vInteger
的 java class,它扩展了 class Integer
(仅包含 int
值、构造函数、getter ) 并实施 class Comparing
。那个有一个抽象方法 compare(Comparing obj);
,我在 class vInteger
中实现了它。但是,我无法从 Integer
class 调用 getter 来获取 int
值。
这里有什么问题? :)
谢谢
如果您看到整数 class 那么它是
public final class Integer extends Number implements Comparable<Integer>
你不能扩展 class 因为它是最终的
我同意Mukesh Kumar。
和
你能试试下面的代码吗?
public class VInteger extends Number implements Comparable<Integer> {
我假设您指的是自定义 Integer
class(这不是个好主意,顺便说一句,因为它会隐藏 java.lang.Integer
,所以重命名会更安全它)。
现在,您的 class 看起来像这样(根据您的描述):
public class vInteger extends Integer implements Comparing
{
...
public int compare(Comparing obj)
{
// here you can access this.getIntValue() (the getter of your Integer class)
// however, obj.getIntValue() wouldn't work, since `obj` can be of any
// class that implements `Comparing`. It doesn't have to be a sub-class of
// your Integer class. In order to access the int value of `obj`, you must
// first test if it's actually an Integer and if so, cast it to Integer
if (obj instanceof Integer) {
Integer oint = (Integer) obj;
// now you can do something with oint.getIntValue()
}
}
...
}
P.S.,更好的解决方案是使用通用比较接口:
public interface Comparing<T>
{
public int compare (T obj);
}
public class vInteger extends Integer implements Comparing<vInteger>
{
public int compare (vInteger obj)
{
// now you can access obj.getIntValue() without any casting
}
}