从Parent类方法调用Child类方法

时间:2017-06-08 08:44:16

标签: java oop inheritance methods

考虑以下案例

class A
{
    X()
    {
        //some code
        Y();
    }
}

class B extends A
{
    Y(){ //some code }
}

如果我创建了类B的对象,并且我尝试使用函数X,因为它是从A扩展的,函数X是否可能可以访问类Y的调用对象的函数B

2 个答案:

答案 0 :(得分:1)

你可以,但必须满足

  1. 一个类是抽象的
  2. Y方法也是抽象的
  3. 示例:

    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中没有做任何事情:

class A{
    void Y(){}
}

注意:如果在这两个类中都有Y(),则多态性可以确保B的实例将使用自己的实现。

如果您希望能够创建A的实例,那么第二个解决方案可能会有问题,因为它将是抽象的。