-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathclass_inheritance.rb
More file actions
190 lines (150 loc) · 3.77 KB
/
Copy pathclass_inheritance.rb
File metadata and controls
190 lines (150 loc) · 3.77 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
#!/bin/env ruby
#
# Class represents a person
#
class Person
attr_accessor :age
attr_reader :name
def name=(name)
if name.to_s == ''
raise "Every person has a name"
else
@name = name
end
end
def initialize(name='Anonymous')
puts "Person.new is called"
self.name = name
end
def introduce
puts "My name is: #{@name}"
end
def print_age
puts "My age is: #{@age}"
end
def raise_message
raise "Raise is called"
end
def to_s
# over-write method
out = format("PERSON . %10s: %-15s", 'Name', @name)
out += format("\nPERSON . %10s: %-15s", 'Age', @age)
end
end
class Student < Person
#
# Represents a student in college/university
#
attr_reader :college, :group
def initialize
super
puts "Student.new is called"
end
def college=(mcollege)
# set the college name
if mcollege.to_s == ''
raise "College name cannot be empty"
else
@college = mcollege.to_s
end
end
def group=(mgroup)
# set the group name
if mgroup.to_s == ''
raise "Group cannot be empty"
else
@group = mgroup.to_s
end
end
def to_s
new = super.to_s
new += format("\nSTUDENT. %10s: %-15s", 'College', @college)
new += format("\nSTUDENT. %10s: %-15s", 'Group', @group)
end
end
class Sportfan < Person
#
# Represents a sport fan
#
def self.fc_kl(name)
puts "Class method fc_kl called"
Sportfan.new(name, 'football', 'FC KL')
end
def self.hc_kl(name)
puts "Class method hc_kl called"
Sportfan.new(name, 'hockey', 'HC KL')
end
def self.bc_kl(name)
puts "Class method bc_kl called"
Sportfan.new(name, 'basketball', 'BC KL')
end
attr_reader :team, :sport, :name
def initialize(name, sport='football', team='FC KL')
#self.name = name # My name is
super(name)
self.team = team # Best team ever
self.sport = sport # Football vs Basketball :)
end
def team=(team)
if team.to_s == ''
raise "U don't have a favorite team ???"
else
@team = team
end
end
def sport=(sport)
if sport.to_s == ''
raise "U don't have a favorite sport ???"
else
@sport = sport
end
end
def info
puts "My name is #{name}"
puts "I'm a SPOOOOOOORT Faaaaaaan!!!!"
puts "The best team in #{self.sport} is '#{team}'"
end
def to_s
out = format("Sportfan . %10s: %-15s\n", 'Name', name)
out += format("Sportfan . %10s: %-15s\n", 'Sport', sport)
out += format("Sportfan . %10s: %-15s", 'Team', team)
end
end
person1 = Person.new
person1.age=18
person1.name='Tommy'
person1.introduce
person1.print_age
puts '----------------------------------------'
puts person1.name
puts person1.age
puts person1
puts '----------------------------------------'
student1 = Student.new
student1.age = 18
student1.name = 'Robert'
student1.college = 'LUIF'
student1.group = 'ZM-1'
puts student1.name
puts student1.age
puts student1.college
puts student1.group
puts '----------------------------------------'
puts student1
puts '----------------------------------------'
fan1 = Sportfan.new('JJB')
fan1.info
fan1.name = 'JJ Updated'
fan1.sport = 'baseball'
fan1.team = 'BC KL'
fan1.info
puts fan1
fan2 = Sportfan.fc_kl('Tom')
puts fan2
puts '----------------------------------------'
fan3 = Sportfan.bc_kl('Bob')
puts fan3
puts '----------------------------------------'
fan4 = Sportfan.hc_kl('Handi')
puts fan4
puts '----------------------------------------'