从继承ruby的类创建对象

从继承ruby的类创建对象,ruby,inheritance,Ruby,Inheritance,我正在努力理解(谷歌搜索后)如何实现这一点:我有一门课: 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 s

我正在努力理解(谷歌搜索后)如何实现这一点:我有一门课:

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
(我刚刚创建的)与学生关联的
Grade
对象,以及如何调用继承的对象,例如,我想:

输入“学生姓名和相关成绩”


我知道我可以将grade变量放在
学生
类中,但为了学习,我这样做。

此代码可以满足您的要求:

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}"

此代码将执行您想要的操作:

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}"

首先,不需要像那样在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))
或者,由于默认值,您取消了等级,以后再指定:

student = Student.new("Test", 18)
# later
student.grade = Grade.new(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))
或者,由于默认值,您取消了等级,以后再指定:

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

这段代码将从头重写:1。Ruby中的getter和setter不应该以这个
get
set
垃圾作为前缀。2. <代码>成绩不应从
学生
中派生。3.应提供关联
学生
年级
的代码。我建议你学习一些Ruby教程,否则你会写一些毫无意义的东西,而这些东西是无法纠正的。Ruby中的getter和setter不应该以这个
get
set
垃圾作为前缀。2. <代码>成绩不应从
学生
中派生。3.应提供关联
学生
年级
的代码。我建议你学习一些Ruby教程,否则你写的东西毫无意义,无法纠正。谢谢,我如何访问与学生相关的分数值我正在尝试类似puts Student.grade.grade
puts Student.grade.value
谢谢,我如何访问与学生关联的成绩值我正在尝试类似puts Student.grade.grade
puts Student.grade.value