0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

クラスの継承

Last updated at Posted at 2024-11-14

基本はスーパークラスは一つだけ

>Rubyの継承は単一継承です。つまり、継承できるスーパークラスは一つだけになります(ただし、Rubyはミックスインという多重継承に似た機能を持っています。

継承関係の頂点のクラス

継承関係の頂点にいるのはBasicObjectクラスです。それをObjectクラスが継承しています。StringクラスやArrayクラスといったこれまでに説明してきた代表的なクラスは、全てObjectクラスを継承しています。

継承されていることを観察する

irb(main):001* class User
irb(main):002> end
=> nil
irb(main):003> user = User.new
=> #<User:0x000000010d0c5ec8>
irb(main):004> user.to_s
=> "#<User:0x000000010d0c5ec8>"
irb(main):005> user.nil?
=> false
irb(main):006> User.superclass
=> Object

Userクラスのオブジェクトはto_sメソッドやnil?メソッドを呼び出すことができます。
...
これはUserクラスがObjectクラスを継承しているためです

  • objectクラスを継承していることがわかる
irb(main):007> user.methods.sort
=>
[:!,
 :!=,
 :!~,
 :<=>,
 :==,
 :===,
 :=~,
 :__id__,
 :__send__,
 :class,
 :clone,
 :define_singleton_method,
 :display,
 :dup,
 :enum_for,
 ...

Objectクラスから継承したメソッドの一覧を確認

インスタンスのクラスを調べる

irb(main):008> user.class
=> User
irb(main):010> user.instance_of?(User)
=> true
irb(main):011> user.instance_of?(String)
=> false
  • インスタンスのクラスを調べられる
  • Userクラスかどうかを確認できる
irb(main):012> user.is_a?(User)
=> true
irb(main):013> user.is_a?(Object)
=> true
irb(main):014> user.is_a?(BasicObject)
=> true
irb(main):015> user.is_a?(String)
=> false
  • is_aの関係にあるかどうかも調べられる

クラスを継承させる

irb(main):001* class Product
irb(main):002> end
=> nil
irb(main):003* class DVD < Product
irb(main):004> end
=> nil
irb(main):005> dvd = DVD.new
=> #<DVD:0x0000000113d35ba8>
irb(main):006> dvd.is_a?(DVD)
=> true
irb(main):007> dvd.is_a?(Product)
=> true
  • DVD < Productと書くと親子関係になる

Ruby on Rails APIで確かめてみる

ActionDispatch::AssertionResponse < Object

objectクラスがスーパークラスなのがわかる

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?