title: Have `NextMethod` invoke implicit method even when explicit class present
body: <p>I wish to dispatch against explicit and implicit classes.  Here we create an implicit class method (<code>s3fun.integer</code>), and explicit method (<code>s3fun.explicit</code>), and a default method:</p>
  
  <pre><code>s3fun.integer &lt;- function(x) "Integer"
  s3fun.explicit &lt;- function(x) { cat("Dispatching\n"); NextMethod() }
  s3fun.default &lt;- function(x) "Default"
  s3fun &lt;- function(x) UseMethod("s3fun")
  </code></pre>
  
  <p>If we try this with an object of implicit class "integer", this works as expected:</p>
  
  <pre><code>s3fun(1:3)
  # [1] "Integer"
  </code></pre>
  
  <p>However, if we try with an object that has the same implicit class, but also has an explicit class, the <code>NextMethod</code> call skips over the implicit method and goes straight to the default:</p>
  
  <pre><code>s3fun(structure(1:3, class="explicit"))
  # Dispatching
  # [1] "Default"         # doesn't dispatch `s3fun.integer`
  </code></pre>
  
  <p>I'm able to work around with a hack in the default:</p>
  
  <pre><code>s3fun.default &lt;- function(x) {
    if(is.null(attr(x, "class"))) return("Default")
    do.call(.Generic, list(unclass(x)))
  }
  s3fun(structure(1:3, class="explicit"))
  # Dispatching
  # [1] "Integer"
  </code></pre>
  
  <p>but I am wondering if there is a cleaner way to do this.</p>