1.先看私有方法能否被繼承
class a
@@name="anleb"
def ask
puts @@name
endprivate :ask
enda=a.new
#a.ask
a.send(:ask)
class b < a
endb=b.new
#b.ask
b.send(:ask)
結論:對於private方法,是被繼承的,類變數(類似於靜態變數,屬於所有例項),也是可以被繼承的。
2.看類的方法能否被繼承
題外話:private影響誰?
class a
private
def self.ask
puts "class method1"
endclass << self
def play
puts "class method2"
endend
def tell
puts "instance methods"
endend
a.ask
a.send(:ask)
a.play
a.send(:play)
a=a.new
#a.tell
a.send(:tell)
結論:可以看到private只影響例項方法,對類的方法沒有影響,要想設定類的private方法,必須在類的單件類中設定。如下:
class << self
private
def play
puts "class method2"
endend
進入正題,類的方法是否能繼承
class a
private
def self.ask
puts "class method1"
endclass << self
private
def play
puts "class method2"
endend
def tell
puts "instance methods"
endend
class b < a
endb.ask
b.send(:play)
結論:類的方法也是能繼承的,如果看過元程式設計應該知道b的祖先鏈:b-a-a的單件類-object-kernel-baseobject
3.類本身的例項變數是否能繼承
class a
@name="anleb"
class << self
attr_accessor :name
endend
p a.name
class b < a
endp b.name
輸出:anleb
nil
結論:說明類的例項變數是不繼承的,注意,這裡要區別於 類的物件的例項變數。
根據元程式設計的思路,就是:
物件包含:
物件對類的引用(指標)
物件的例項變數
物件的object_id
物件的狀態tainted和frozen狀態
類包含:
例項的方法
類變數因為物件的例項變數是存在於物件中的,所有其他的物件無法從類中獲得這個例項變數。
4.super
class a
attr_accessor :ob_name
def initialize
@ob_name="anleb"
endend
p a.new.ob_name
class b < a
attr_accessor :ob_id
def initialize
@ob_id=1
endend
p b.new.ob_name
輸出:anleb
nil #這裡是nil,是因為繼承了attr_accessor生成的魔法方法
說明:這裡不要誤解了,都說是覆蓋了父類a的initialize方法,其實不是的,因為物件呼叫方法的模式是:先向右-找到自己的類,然後再向上查詢自己的祖先類。
這裡沒有呼叫父類a的初始化方法,是因為,先找到了自己類b的初始化方法。
如果也繼承父類的同名方法呢?利用super
class a
attr_accessor :ob_name
def initialize
@ob_name="anleb"
enddef ask
puts "a methods"
endend
p a.new.ob_name
class b < a
attr_accessor :ob_id
def initialize
@ob_id=1
super
enddef ask
puts "b methods"
super
endend
p b.new.ob_name
b.new.ask
輸出:"anleb"
"anleb"
b methods
a methods
類的繼承大致就這樣,水平有限,有錯誤大家指正。
CSS中哪些元素可以繼承,哪些不可以繼承
一 無繼承性的屬性 1 display 規定元素應該生成的框的型別 2 文字屬性 vertical align 垂直文字對齊 text decoration 規定新增到文字的裝飾 text shadow 文字陰影效果 white space 空白符的處理 unicode bidi 設定文字的方向 3...
繼承父類到底繼承了哪些東西
繼承父類應該是有這幾個地方繼承了 1.原型prototype上的方法和屬性 2.類上的那些操作,類上的屬性,類上的方法,不過我覺得這屬於私有屬性和方法了,我覺得原型prototype上的才是公共的方法和屬性 如圖可以看到,無論es5還是6,都是如此,es6中,通過extends繼承原型上的方法和屬性...
css有哪些屬性可以繼承
1 字型系列屬性 font 組合字型 font family 規定元素的字型系列 font weight 設定字型的粗細 font size 設定字型的尺寸 font style 定義字型的風格 font variant 設定小型大寫字母的字型顯示文字,這意味著所有的小寫字母均會被轉換為 大寫,但是...