Sie können eine Klasse von Grund auf neu erstellen, aber Sie können eine vorhandene Klasse verwenden und eine neue Klasse basierend auf dieser Klasse erstellen. Auf diese Weise können die gemeinsamen Teile zusammengesetzt und der Code effizient geschrieben werden. Das Erstellen einer neuen Klasse basierend auf einer bestimmten Klasse wird als Vererbung bezeichnet. Sie können eine neue Klasse definieren, indem Sie eine andere Klasse mit "class new class name <original class name" erben. Die neue Klasse heißt "untergeordnete Klasse" und die ursprüngliche Klasse heißt "übergeordnete Klasse". Die Instanzmethode der übergeordneten Klasse wird vererbt.
food.rb
require "./menu"
class Food < Menu
end
Wenn eine Instanz einer untergeordneten Klasse erbt, erbt die untergeordnete Klasse die Instanzmethode der übergeordneten Klasse.
index.rb
food1=Food.new
puts food1.name
puts food2.info
menu.rb
class Menu
attr_accessor :name
#wird bearbeitet
def info
return "#{self.name} #{self.price}Kreis"
end
end
Verwenden Sie "attr_accessor" wie zuvor, um Instanzvariablen zu untergeordneten Klassen hinzuzufügen.
menu.rb
class Menu
attr_accessor :name
attr_accessor :price
end
Weil die Food-Klasse von der Menu-Klasse erbt. Es hat drei Instanzvariablen "Name, Preis, Kalorie".
food.rb
class Food < Menu
#Fügen Sie der Lebensmittelklasse Kalorien hinzu
attr_accessor :calorie
end
Instanzmethoden können auf die gleiche Weise hinzugefügt werden.
Sie können eine Methode überschreiben, indem Sie in der untergeordneten Klasse eine Methode definieren, die denselben Namen wie die übergeordnete Methode hat. Dies wird als Überschreiben bezeichnet.
index.rb(Rufen Sie die Methode auf)
food1~Food.new(...)
food1.calorie=700
puts food1.info
menu.rb(Elternklasse)
class Menu
#wird bearbeitet
def info
#wird bearbeitet
end
end
food.rb(Kinderklasse)
class Food < Menu
#wird bearbeitet
#Überschreibmethode (Überschreibmethode heißt)
def info
#wird bearbeitet
end
end
Die untergeordnete Klasseninstanz ruft vorzugsweise die in der untergeordneten Klasse definierte Methode auf. Wenn die untergeordnete Klasse und die übergeordnete Klasse Methoden mit demselben Namen haben, wird der Inhalt der Methode der untergeordneten Klasse überschrieben. Sie können es auch mit der Initialisierungsmethode überschreiben.
super Sie können eine Methode mit demselben Namen in der übergeordneten Klasse aufrufen, indem Sie in der überschriebenen Methode "super" festlegen. Da super eine Methode aufruft, muss ein Argument gemäß der Methode der übergeordneten Klasse an super übergeben werden.
menu.rb
class Menu
attr_accessor :name
attr_accessor :price
def initialize(name:, price:)
self.name=name
self.price=price
end
end
food.js
class Food < Menu
attr_accessor :calorie
def initialize(name:, price:, calorie:)
super(name: name, price: price)
self.calorie=calorie
end
end
Eine Klasse, die Datumsangaben verarbeitet. Die Date-Klasse wurde bereits von Ruby vorbereitet und kann verwendet werden, ohne eine Klasse zu definieren, indem das Datum mit "require" gelesen wird. Bereits vorbereitete Klassen erfordern eine andere Schreibweise als andere </ font>
index.rb
# "/date"ist nicht!
reruire "date"
Sie können eine Instanz mit "Date.new" erstellen. Sie können eine Instanz des heutigen Datums mit "Date.today" erstellen.
index.rb
require "date"
#Erstellen Sie eine Datumsmethode, indem Sie "Jahr / Monat / Tag" als Argument übergeben
date1=Date.new(2020,7,8)
puts date
Konsole
2020-07-08
Es gibt viele Instanzmethoden. Es ist die "Sonntag?" - Methode, die als boolescher Wert übergeben wird, ob es Sonntag ist oder nicht.
index.rb
require "date"
date1=date1.new(2020,7,11)
puts date1.sunday?
Konsole
false
Eine Methode zum Aufrufen einer Klasse. Der Ort von "heute" von "Date.today". Klassenmethoden können mit def class name.method name
definiert werden. Schreiben Sie im Gegensatz zur Instanzmethode den Klassennamen vor den Methodennamen.
Rufen Sie die Klassenmethode mit class name.method name
auf.
menu.rb
class Menu
#wird bearbeitet
#Gibt einen booleschen Wert zurück, der angibt, ob das heutige Datum Sonntag ist
def Menu.is_discount_day?
#Datumsinstanz mit Informationen zum heutigen Datum
today=Date.today
return today.sunday
end
end
puts Menu.is_discount_day?
Rufen Sie eine Klassenmethode innerhalb einer Instanzmethode auf
menu.rb
class Menu
#wird bearbeitet
def get_total_price #Instanzmethode
if Menu.discount_day? #Aufrufen einer Klassenmethode
#wird bearbeitet
end
end
end
Recommended Posts