1.如何聲明一個子類
2.以下三種方式傳入父類initialize方法的參數分別是什么?
def initialize( a, b, c )
super
end
# This passes no arguments to the superclass
def initialize( a, b, c)
super()
end
第一種把參數中a,b,c傳入父類initialize方法;第二種傳入全部參數,但不加上括號;第三種不傳入參數
3.屬性的setter/getter
有人這樣寫setter/getter:
注:這是正確的:def name=(aName)
但這卻是錯的:def name =(aName)
你看出差別的了嗎?
根據上一章,你可以知道,這里定義了兩個方法:description方法和description=方法。原來是通過將"="加入方法名實現的,ruby真是神奇,Java就不能這樣寫。
然而,事實上有更簡單的方法來實現setter/getter
4.super
和Java不一樣,Ruby中的super方法可以出現在任何方法中,而不只是initialize(構造方法)中。
在第2點中就對super方法的使用有介紹,單獨的super將所有參數傳給父類initialize,而帶參數的super則將指定參數傳給父類initialize。
# This passes a, b, c to the superclass's aMethod
def aMethod( a, b, c )
super
end
5.常量和嵌套類(constants & nested class)
常量:以大寫字母開頭的變量。
如果要訪問常量或內部類,需用 ::
ob = X::Y.new
ob.xyz
6.部分類(Partial Class)
在Ruby中可以對現存的類進行修改,并影響已經生成的對象
a = A.new
a.public_methods(false)//打印A class所有public的方法
# => [:a] //只有a
class A
def b
puts 'b'
end
end
a.public_methods(false)
# => [:a, :b]//有a和b
而不能修改的,是類繼承了哪個類。比如
class A < String
def c
puts 'c'
end
end
# TypeError: superclass mismatch for class A
# 所有類默認繼承了Object類,A也繼承了Object,所以當你讓A繼承String時就會報錯
新聞熱點
疑難解答
圖片精選