10.誇張と抽象
11073 ワード
この記事はYouTubeレッスン「Demo Cottlin」を見てまとめたものです.
https://www.youtube.com/playlist?list=PLQdnHjXZyYadiw5aV3p6DwUdXV2bZuhlN
講座を見たい人は上のリンクで勉強できます.
オーバーライド(Override)
要約:親で関数を開き、子で上書きを使用して再定義できます. 抽象
https://www.youtube.com/playlist?list=PLQdnHjXZyYadiw5aV3p6DwUdXV2bZuhlN
講座を見たい人は上のリンクで勉強できます.
オーバーライド(Override)
オーバーライドとは、親クラスで作成された関数(fun)です.
サブクラスでの再定義を許可します.(スーパー(親)クラスを許可)
コードを見て理解しましょう.fun main() {
val t = Tiger()
t.eat()
}
open class Animal {
fun eat() {
println("음식을 먹습니다.")
}
}
class Tiger : Animal()
結果:
食べ物を食べる.
Tigerクラスでeat()関数を再定義したいのですが、スーパー(親)クラスで定義されています.
でも!
Openを使用して親fun関数を開きます.
サブクラスで書き換えが許可されている場合は?fun main() {
val t = Tiger()
t.eat()
}
open class Animal {
open fun eat() {
println("음식을 먹습니다.")
}
}
class Tiger : Animal(){
override fun eat(){
println("고기를 먹습니다.")
}
}
結果:
私は肉を食べます.
fun main() {
val t = Tiger()
t.eat()
}
open class Animal {
fun eat() {
println("음식을 먹습니다.")
}
}
class Tiger : Animal()
fun main() {
val t = Tiger()
t.eat()
}
open class Animal {
open fun eat() {
println("음식을 먹습니다.")
}
}
class Tiger : Animal(){
override fun eat(){
println("고기를 먹습니다.")
}
}
抽象
上の上書きの場合、親はA関数を作成し、関数の内容を構成します.
これは子供が必要に応じてA関数を再定義する場合です.
この場合、親はA関数を作成し、その内容は空(ハウジングのみ)です.
「子にはA関数が必要」という点が親で明示されている場合.
各サブクラスは、必要に応じて空の関数を実装する内容を抽象と呼ぶ.
コードを見て理解しようfun main() {
var r = Rabbit()
r.eat()
r.sniff()
}
// 추상 클래스
abstract class Animal {
// 추상 함수
abstract fun eat()
// 일반 함수
fun sniff() {
println("킁킁")
}
}
// Animal 추상클래스를 상속받은 Rabbit 클래스
class Rabbit : Animal() {
// 추상함수 eat()를 정의
override fun eat(){
println("당근을 먹습니다.")
}
}
結果:
ニンジンを食べる.
ふんふん
このようにabstractを追加した抽象クラスは未完了であるため、インスタンスを単独で作成することはできません.
したがって,実装を完了するためにサブクラスから継承する必要がある.
インタフェース
上記の場合,abstractclassを用いて抽象化した.
インタフェースを利用する方法もあります.
コトリンではインタフェース
•プロパティ
•抽象関数
•一般的な関数
すべての人を持つことができます.
しかし、抽象関数はジェネレータを有することができる.
インタフェースにジェネレータを持つことはできません.
また、インタフェースの内容は「関数を内部で実装するかどうか」に依存します.
最後に、複数のインタフェースを一度に継承することで、設計をより柔軟にすることができます.
コードを見て理解しようfun main() {
var d = Dog()
d.run()
d.eat()
}
// Runner 인터페이스
interface Runner{
// 추상함수
fun run()
}
// Eater 인터페이스
interface Eater{
// 일반함수
fun eat() {
println("음식을 먹습니다.")
}
}
// 인터페이스 2개를 상속받은 Dog 클래스
class Dog : Runner, Eater {
// 추상함수 재정의
override fun run(){
println("우다다다 뜁니다.")
}
// 일반함수 재정의
override fun eat(){
println("허겁지겁 먹습니다.")
}
}
結果:
ブーブーと踊りそうになった
むしゃむしゃ食べる.
まとめてみると、
1.上書き:子の再定義に使用される実装が完了した親関数.
2.抽象クラス:親の内容が空の関数で、子によって定義されます.
3.インタフェース:複数の異なる機能が必要な場合に使用します.
Reference
この問題について(10.誇張と抽象), 我々は、より多くの情報をここで見つけました
https://velog.io/@dominos/11.-오버라이딩과-추상화-ula0lkq4
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
fun main() {
var r = Rabbit()
r.eat()
r.sniff()
}
// 추상 클래스
abstract class Animal {
// 추상 함수
abstract fun eat()
// 일반 함수
fun sniff() {
println("킁킁")
}
}
// Animal 추상클래스를 상속받은 Rabbit 클래스
class Rabbit : Animal() {
// 추상함수 eat()를 정의
override fun eat(){
println("당근을 먹습니다.")
}
}
上記の場合,abstractclassを用いて抽象化した.
インタフェースを利用する方法もあります.
コトリンではインタフェース
•プロパティ
•抽象関数
•一般的な関数
すべての人を持つことができます.
しかし、抽象関数はジェネレータを有することができる.
インタフェースにジェネレータを持つことはできません.
また、インタフェースの内容は「関数を内部で実装するかどうか」に依存します.
最後に、複数のインタフェースを一度に継承することで、設計をより柔軟にすることができます.
コードを見て理解しよう
fun main() {
var d = Dog()
d.run()
d.eat()
}
// Runner 인터페이스
interface Runner{
// 추상함수
fun run()
}
// Eater 인터페이스
interface Eater{
// 일반함수
fun eat() {
println("음식을 먹습니다.")
}
}
// 인터페이스 2개를 상속받은 Dog 클래스
class Dog : Runner, Eater {
// 추상함수 재정의
override fun run(){
println("우다다다 뜁니다.")
}
// 일반함수 재정의
override fun eat(){
println("허겁지겁 먹습니다.")
}
}
結果:ブーブーと踊りそうになった
むしゃむしゃ食べる.
まとめてみると、
1.上書き:子の再定義に使用される実装が完了した親関数.
2.抽象クラス:親の内容が空の関数で、子によって定義されます.
3.インタフェース:複数の異なる機能が必要な場合に使用します.
Reference
この問題について(10.誇張と抽象), 我々は、より多くの情報をここで見つけました https://velog.io/@dominos/11.-오버라이딩과-추상화-ula0lkq4テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol