2016-08-01 78 views
0

林就如何落實這個掙扎的理解(谷歌搜索後):我有一個類:創建從一個類的對象這是繼承紅寶石

class Student 
    # constructor method 
    def initialize(name,age) 
     @name, @age = name, age 
    end 

    # accessor methods 
    def getName 
     @name 
    end 
    def getAge 
     @age 
    end 

    # setter methods 
    def setName=(value) 
     @name = value 
    end 
    def setAge=(value) 
     @age = value 
    end 
end 

而且可以說我有另一個類,從學生繼承

class Grade < Student 
    #constructor method 
    def initialize(grade) 
     super 
     @grade = grade 
    end 

    # accessor methods 
    def getGrade 
     @grade 
    end 

    # setter methods 
    def setGrade=(value) 
     @grade = value 
    end 
end 

我知道如何建立一個下賤:

student = Student.new(name, age) 

如何建立這個Student(我剛纔創建)與學生相關的Grade對象,我怎麼會叫繼承的對象,比如我想:

puts 'student name and associated grade'

我知道我可以把Student內的等級變量類,但爲了學習即時通訊這樣做的目的。

+0

這段代碼是從頭開始重寫的:1. Ruby中的getters和setter不應該以這個'get'和'set'垃圾爲前綴。 2.「成績」不應來自「學生」。 3.應提供關聯「學生」和「成績」的代碼。我建議你通過一些Ruby教程,否則你正在編寫無法糾正的無意義的東西。 – mudasobwa

回答

1

首先,沒有必要在Ruby中定義存取這樣的,它遠遠習慣。讓我們先清理一下:

class Student 
    attr_accessor :name, :age 

    def initialize(name, age) 
    @name =name 
    @age = age 
    end 
end 

class Grade 
    attr_accessor :value 

    def initialize(grade) 
    @value = grade 
    end 
end 

其次,它似乎並不像Grade應該從Student繼承所有,只是調整後者還存儲Grade實例變量:

class Student 
    attr_accessor :name, :age, :grade 

    def initialize(name, age, grade = nil) 
    @name =name 
    @age = age 
    @grade = grade 
    end 
end 

然後,您可以實例化一個這樣的學生:

student = Student.new("Test", 18, Grade.new(1)) 

或者因爲默認值,你離開等級並分配它er:

student = Student.new("Test", 18) 
# later 
student.grade = Grade.new(1) 
+0

謝謝,我將如何訪問與學生相關的等級值,嘗試類似puts student.Grade.grade –

+0

'puts student.grade.value' –

2

該代碼會做你想要的東西:

class Grade 
    attr_accessor :value 
    def initialize value 
    @value = value 
    end 
end 

class Student 
    attr_accessor :name, :age, :grade 
    def initialize name, age, grade 
     @name, @age, @grade = name, age, Grade.new(grade) 
    end 
end 

st = Student.new 'John', 18, 5 
puts "student #{st.name} and associated grade #{st.grade.value}"