考虑以下案例
class A
{
X()
{
//some code
Y();
}
}
class B extends A
{
Y(){ //some code }
}
如果我创建了类B
的对象,并且我尝试使用函数X
,因为它是从A
扩展的,函数X
是否可能可以访问类Y
的调用对象的函数B
。
答案 0 :(得分:1)
你可以,但必须满足
示例:
library(lubridate)
tmp <- seq(as.POSIXct('2011-08-01 13:00'), as.POSIXct('2011-08-05 03:00'),
len=42)
df <- data.frame(tm=tmp, x=seq(42))
df$h<-substring(df$tm,12)
df$h<-parse_date_time(df$h,"HMS")
a<-df$h>=parse_date_time("00:00:00","HMS") & df$h<parse_date_time("06:00:00","HMS")
b<-df$h>=parse_date_time("06:00:00","HMS") & df$h<parse_date_time("12:00:00","HMS")
c<-df$h>=parse_date_time("12:00:00","HMS") & df$h<parse_date_time("18:00:00","HMS")
d<-df$h>=parse_date_time("18:00:00","HMS") & df$h<parse_date_time("24:00:00","HMS")
df<-cbind(df,a,b,c,d)
df$group<-as.factor(1*a+2*b+3*c+4*d)
levels(df$group)<-c("12am-6am", "6am-12pm", "12pm-6pm", "6pm-12am")
df$h<-NULL
df$a<-NULL
df$b<-NULL
df$c<-NULL
df$d<-NULL
df
每当A类调用Y时,它会实际调用抽象方法Y的实现方法
答案 1 :(得分:0)
仅当A
具有相同签名的方法(或超类有一个)时,否则它无法找到/使用未在其上下文中定义的方法。
可以这样做
A
A
中使用抽象方法(参见ΦXocę 웃 Пepeúpa ツ answer)。第一个解决方案并不总是最好的,因为你可能有一个方法在A
中没有做任何事情:
class A{
void Y(){}
}
注意:如果在这两个类中都有Y()
,则多态性可以确保B
的实例将使用自己的实现。
如果您希望能够创建A
的实例,那么第二个解决方案可能会有问题,因为它将是抽象的。