Class Union
Purpose
To implement class unions
> setClass("A", representation = representation(name = "character"), + prototype = prototype(name = "vinay")) [1] "A" > getClass("A") Class "A" Slots: Name: name Class: character > setMethod("initialize", "A", function(.Object, ..., who = "vinay") { + .Object@name <- who + .Object + }) [1] "initialize" > x <- new("A", ) > print(x) An object of class "A" Slot "name": [1] "vinay" > setGeneric("getPerson", function(object) standardGeneric("getPerson")) [1] "getPerson" > showMethods("getPerson") Function: getPerson (package .GlobalEnv) <No methods> > setMethod("getPerson", "A", function(object) { + "vinay" + }) [1] "getPerson" > x <- new("A", ) > print(x) An object of class "A" Slot "name": [1] "vinay" > getPerson(x) [1] "vinay" > setClass("Sub1", representation = representation(interest = "character"), + prototype = prototype(interest = "statistics")) [1] "Sub1" > getClass("Sub1") Class "Sub1" Slots: Name: interest Class: character > setMethod("initialize", "Sub1", function(.Object, ..., what = "statistics") { + .Object <- callNextMethod() + .Object@interest <- what + .Object + }) [1] "initialize" > x <- new("Sub1") > print(x) An object of class "Sub1" Slot "interest": [1] "statistics" > setClass("Sub2", representation = representation(interest = "character"), + prototype = prototype(interest = "R")) [1] "Sub2" > getClass("Sub2") Class "Sub2" Slots: Name: interest Class: character > setMethod("initialize", "Sub2", function(.Object, ..., what = "R") { + .Object <- callNextMethod() + .Object@interest <- what + .Object + }) [1] "initialize" > x <- new("Sub2") > print(x) An object of class "Sub2" Slot "interest": [1] "R" |
Defining a abstract class super class for Sub1 and Sub2 and then calling a function base class function on a derived class object.
> setClassUnion("A", c("Sub1", "Sub2")) [1] "A" > x <- new("Sub2") > x An object of class "Sub2" Slot "interest": [1] "R" > getPerson(x) [1] "vinay" |