我对文档中使用的类名有些困惑。
如果我想使用df[2] = df.groupby('A').cumcount(ascending=False)+1
df[1] = np.where(df['A']==True,df[2],None)
df[1] = df[1].fillna(method='bfill').fillna(0)
del df[2]
A B 1
# 3 False 0.277557 3.0
# 7 False 0.400751 3.0
# 6 False 0.431587 3.0
# 5 False 0.481006 3.0
# 1 True 0.534364 3.0
# 2 True 0.556378 2.0
# 0 True 0.863192 1.0
# 4 False 0.916247 0.0
类中的方法getLength(Object name)
,编译器会接受Array
但不接受java.lang.reflect.Array.getLength(nameOfArray)
。虽然下面链接的API文档的图片似乎暗示我两个类都链接到Array类方法。
答案 0 :(得分:4)
您看到它们相关联的原因是Object
是Array
的超类。
在Java中,Object
是所有类的超类。
java.lang包中的Object类位于顶部 类层次结构树。每个班级都是直系或间接的后代, 对象类。
此处更多信息:https://docs.oracle.com/javase/tutorial/java/IandI/objectclass.html
每个这样的子类(本例中为Array类)都从超类继承了一些方法(本例中为Object类)。
如果子类希望更改它从超类继承的任何变量或方法,那么它将覆盖那些。此外,子类本身可能有自己的变量和方法,这些变量和方法与超类无关。在您显示的示例中就是这种情况,即Array是一个具有长度的数据结构,但其父对象没有长度。
注意:请阅读 Java继承。
此外,还阅读了有关访问说明符(因为私有成员未被继承),关键字(例如final
变量无法更改值,{{1方法不能被覆盖,final
类不能被子类化。祝你好运!
答案 1 :(得分:3)
如果我想使用Array类中的方法getLength(Object name),编译器会接受
java.lang.reflect.Array.getLength(nameOfArray)
正确,因为那是方法的所在。
但不是
java.lang.Object.getLength(nameOfArray)
。
不正确,因为java.lang.Object
类中没有这样的方法。
虽然下面链接的API文档似乎暗示我们两个类路径都链接到
Array
类方法。
不,它没有。图片中部分的含义是第二个类扩展了第一个类。
答案 2 :(得分:1)
该文档示例显示Array
是Object
的孩子,而不是您可以互换使用它们。
答案 3 :(得分:0)
Array
延伸Object
。这意味着可用于对象的任何方法都可用于数组,但反之则不然。
考虑这个例子。将Array
替换为Student
,将Object
替换为Human
。 Student extends Human
。可以说Human
有getDateOfBirth
方法。 Student
也有getGrades
方法。在Student
,您可以拨打getDateOfBirth
和getGrades
,而在Human
,您只能拨打getDateOfBirth
,因为未为婴儿定义成绩。
请注意Object
是所有其他类的超类。因此,它的方法数量最少。