class クラス名(先頭は必ず大文字)
ARE = 10 ### 定数
@kore ### インスタンス変数(直接defの中に書いてもいいけど)
### classに定義したすべてのmethodからアクセス可能
@@sore ### クラス変数。このクラスから生成したすべてのオブジェクトで
### 共有可能。defの中には定義できません。
def initialize(arg,arg...)
:
end
:
attr_writer :kore ### ①
:
end
メソッド「initialize」は、classをnewしたときに呼び出される初期化用メソッドです
@varで定義した変数はインスタンス変数といい、classの中で共有されます
①で、インスタンス変数に対して以下のattributeを定義することにより、classオブジェクトの
外から該当変数にアクセスができます。これらは、内部的にセッター、ゲッターが自動生成される
ことで実現されています。
attr_writer :インスタンス変数名
attr_reader :インスタンス変数名
attr_accessor :インスタンス変数名
classの中に定数を定義した場合、classの外から定数を読むことができます。ただし、classから
生成したobject経由ではなく、class名経由。
クラス名::ARE、と書きます
class クラス名 < 継承元クラス名
:
end
superクラスと同じ名前のメソッドを定義すると、新たに定義したメソッドが有効になります。
subクラスでオーバーライドしたメソッドの中に、superと書くと、superクラスの同名メソッドが実行されます。このとき、ふつうの変数は引き継がれないが、インスタンス変数だと引き継がれます。
NG例
class AAA
def aiueo
var = 1
end
end
class BBB < AAA
def aiueo ### override
super
var += 1 ### NG
end
end
OK例
class AAA
def aiueo
@var = 1
end
end
class BBB < AAA
def aiueo
super ### ①
@var += 1 ### OK
end
end
オーバーライドするsuperクラスのメソッドが引数を持つ場合は、①は
super(...)
となります。
外から呼び出されるメソッドは "public"、呼び出されては困るのは "private" となります。
未指定で "public" となります。
public :メソッド名
private :メソッド名
class Kami
def ppp
:
end
kkk = Kami.new
kkk.respond_to? :ppp ### true / false