環境
ruby 2.4.1p111
クラスファイルを作成
hello.rb
class Hello
# 初期処理
def initialize(msg)
#@msgはクラス内で参照可能なインスタンス変数です
@msg= msg
end
# インスタンス変数に値を設定できるメソッドを用意
def msg=(value)
@msg= value
end
# メッセージ出力メソッド
def outputMsg
puts "Hello " + @msg
end
end
HelloクラスのHelloクラスのメソッドを呼び出す
main.rb
load "hello.rb"
hello = Hello.new("Initialized Msg.")
hello.outputMsg
hello.msg = "Overwrited Msg."
hello.outputMsg
結果
Hello Initialized Msg.
Hello Overwrited Msg.
インスタンス変数に関して補足
- hello.rbでインスタンス変数@msgに値設定用のメソッドを用意しましたが、attr_accessor メソッドを用意しておけば、以下のメソッドは不要となります。また、attr_accessor メソッドを用意しておく事で、値設定のみでなく、クラス呼び出し元にて、インスタンス変数値の取得も可能となります。
hello.rb
def msg=(value)
@msg= value
end
- 修正版は以下となります。
hello.rb
class Hello
attr_accessor :msg
# 初期処理
def initialize(msg)
#@msgはクラス内で参照可能なインスタンス変数です
@msg= msg
end
# メッセージ出力メソッド
def outputMsg
puts "Hello " + @msg
end
end
クラスの継承
- 継承の記載方法は以下です。
class クラス < スーパークラス
...
end
- 実際には以下の様に書きます。
- Employee(employee.rb) がスーパークラスで、Tanaka(tanaka.rb)が継承します。
- main.rb で呼び出しています。
employee.rb
class Employee
attr_accessor :name
def initialize(name)
@name = name
end
def sayName
puts "My Name is " + @name
end
end
tanaka.rb
class Tanaka < Employee
def doing
puts "I'm working."
end
end
main.rb
load "employee.rb"
load "tanaka.rb"
tanaka = Tanaka.new("Ichiro Tanaka");
tanaka.doing
tanaka.sayName
- 結果は以下となります。
I'm working.
My Name is Ichiro Tanaka