class A
  def foo(x)
    bar(x)
  end
  def bar(x)
  end
  def self.test(x)
  end
end
class B < A
  def bar(x)
  end
end
A.new.foo(1)
B.new.foo("str")
B.new.bar(nil)
A.test(1)
B.test("str")
__END__
# Classes
class A
  def foo: (Integer | String x) -> nil
  def bar: (Integer | String x) -> nil
  def self.test: (Integer | String x) -> nil
end
class B < A
  def bar: ((Integer | String)? x) -> nil
end