2016-08-01 108 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}"