Ruby クラスと定数(Constant)、クラスの継承
Ruby クラスと定数(Constant)、クラスの継承
1. クラスと定数(Constant)
- Rubyでは、定数(Constant)は大文字で始まる名前の変数で、 これらは変更可能ですが、変更を推奨していません。 定数を変更すると、Rubyは警告を発生させます。
class Car
REGION = 'USA'
@@count = 0
def initialize(name)
@name = name
@@count += 1
end
def hello
puts "Hello, I am #{@name}. #{@@count} instance(s)"
end
def self.info
puts "#{@@count} instance(s). Region: #{REGION}"
end
end
car1 = Car.new('ar')
car1.hello
car2 = Car.new('IT')
car2.hello
car3 = Car.new('Ruby')
car3.hello
Car.info
puts Car::REGION
2. クラスの継承
- 親クラス(スーパークラス)の機能を引き続いで、子クラス(サブクラス)を作成することができる。
- コードの再利用性や拡張性を高める仕組み。
基本概念
- スーパークラス(Superclass) : 継承するクラス。
- サブクラス(Subclass) : 継承を受けるクラス。
- サブクラスは、スーパークラスのすべてのメソッドとプロパティを継承する。 サブクラスは、必要に応じて追加のメソッドやプロパティを持つことができ、継承されたメソッドを再定義(オーバーライド)することもできる。
例
- 「親」 自動車クラス(タイヤ、エンジン、ブレーキ)
- 「子」 戦車クラス(+大砲)
- 「子」 乗用車クラス(+後部座席)
- 「子」 トラック(+何台)
例題
1. Userクラスを作成
2. 自己紹介するメソッドhelloを追加
3. Userクラスを継承した、AdminUserクラスを作成
4. 管理者として自己紹介するメソッドadmin_helloを追加
class User
def initialize(name)
@name = name
end
def hello
puts "Hello, My Name is #{@name}!"
end
end
class AdminUser < User
def admin_hello
if @name == "admin"
puts "Hello, 管理者 : #{@name}!"
else
puts "#{@name}様は管理者ではありません。"
end
end
def hello
puts "Admin!"
end
end
user = User.new('AR')
user.hello
admin_user = AdminUser.new('admfin1')
admin_user.hello
admin_user.admin_hello
User Class
- initialize : nameを@nameに割り当てる。
- hello : 挨拶を出力する。
AdminUser < User Class
- User Classのすべてのメソッドを継承する。
- admin_hello : @nameが adminの場合管理者としてのメッセージを出力する。
- hello : User Class の helloメソッドを出力する。