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?

More than 5 years have passed since last update.

5/10 本日勉強したこと Ruby クラスの継承

Last updated at Posted at 2019-05-10

クラスの継承
親クラス(スーパークラス)の機能を引き継いで、子クラス(サブクラス)を作成することができる。
コードの再利用性や拡張性を高める仕組み。

class AdminUser < class User
のように、「子クラス <  親クラス」で継承できる。

class User
 def initialize(name)
  @name = name
 end
 
 def hello
  puts "Hello! I am #{@name}."
 end
end

class AdminUser < User
 def admin_hello
  puts "Hello! I am #{@name} from AdminUser."
 end
end


nakamura = User.new('Nakamura')
nakamura.hello

sato = AdminUser.new('Sato')
sato.hello
sato.admin_hello

上記を実行すると、
Hello! I am Nakamura. Hello! I am Sato. Hello! I am Sato from AdminUser.
と出力される。

※親クラスから子クラスのメソッドは呼び出せない。

メソッドのオーバーライド
子クラスの方で親クラスのメソッドを上書きする方法

ここでは、親クラスのhelloメソッドを子クラスの方でオーバーライドしていく。


class User
 def initialize(name)
  @name = name
 end
 
 def hello
  puts "Hello! I am #{@name}."
 end
end

class AdminUser < User
 def admin_hello
  puts "Hello! I am #{@name} from AdminUser."
 end
 
 def hello
  puts 'Admin!'
 end
end


nakamura = User.new('Nakamura')
nakamura.hello

sato = AdminUser.new('Sato')
sato.hello
sato.admin_hello

これを実行すると、
Hello! I am Nakamura. Admin! Hello! I am Sato from AdminUser.
になる。
helloメソッドが上書きされたのがわかる。


Integerの継承関係

BasicObject

Object

Numeric

Integer

クラスの親クラスを確認するには、superclassメソッドを使う。


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?