- インタフェースインタフェース
- 抽象クラスの抽象
インターフェースと抽象クラスを区別する方法?
次からの転送:HTTPS://www.cnblogs.com/yongjiapei/p/5494894.html
。1、抽象クラスとインタフェースはインスタンス化場合は、抽象クラス変数は、サブクラスを向けるすべての抽象メソッドを実装する必要があり、直接インスタンス化することはできませんオブジェクトのインタフェース変数は、クラスオブジェクトのすべてのインターフェイスのメソッドを実装するために指している必要があります。
図2に示すように、抽象クラスはサブクラスによって継承されるように、インターフェースクラスを実現することができます。
3、インターフェイスが唯一の方法の特許請求の範囲によって行うことができ、抽象クラスはメソッドが行う宣言することができ、あなたが達成するための方法を行うことができます
4、インタフェースで定義された変数のみのpublic static定数することができ、抽象クラス変数は、一般的な変数です。
5、抽象クラス抽象メソッドは、親クラスの抽象メソッドは、完全な達成できない場合は、サブクラスが唯一の抽象クラスであることができ、すべてのキルトクラス、サブクラスで実装する必要があります。同様に、時刻インタフェースの実装は、すべてのインタフェースのメソッドを実装していない場合、クラスは、抽象的であってもよいです。
抽象メソッドは、それが達成することができない断言でき6、インターフェースは仕様であり、抽象クラスの再構成の結果である
図7に示すように、抽象クラスには抽象メソッドになることはできません
8クラスの抽象メソッドが存在する場合、このクラスは、抽象的ですクラス
9、抽象メソッドを実装する、それが私的にはできません、静的にすることはできません。
10、インターフェースは、インターフェース、多重継承とインタフェースが、単一継承クラスを継承することができます。
:上記の記述言語は、多くの人が、以下の簡単な指示を行い、十分に理解していないかもしれ
抽象クラスは:として理解することができるものはプロパティとメソッドがある人間は、属性、性別、年齢、生年月日、方法、食べて、飲み物を持っていますラザード睡眠など。それは事の固有の属性や行動の説明です。
インタフェースは:として理解することができるものの機能を実現することができます人間はあなたが買い物に行くことができ、学ぶことができる、あなたはゲームなどをプレイすることができます。
質問:だから、抽象クラスとインタフェースは、このプレイピーズ食品の購買行動を達成することができ、それらの間の違いは何ですか?
A:抽象クラスを継承しているあなたは、抽象クラスのサブクラスをインスタンス化する場合、それは私がヒトおよびヒト以外の両方にすることはできません、と言うことです単一継承、である、単一です。しかし、インターフェースは多重継承することができ、私はエンドウ豆の食品の買い物を再生することができますが、私は人間だ、私には影響しません。あなたが何かの本質を理解したいのであれば、特定の機能を実現するには、あなたは物事の実装は、その後インタフェースを使用している場合は、抽象クラス、メソッドを使用する必要があります。
記事が言及した10点の復刻のために、私はコードし、それらを理解するためのいくつかのテキストに説明します。
1.抽象クラスとインタフェースをインスタンス化する場合、抽象クラスの変数はすべての抽象メソッドのサブクラスオブジェクトを実装するために指している必要があり、インタフェース変数はクラスオブジェクトは、すべてのインタフェースのメソッドを実装指している必要があり、直接インスタンス化することはできません。
abstract class Human(var name:String)
{
fun eat()
fun drink() //错误,提示必须要在吃喝方法前加入abstract或者实现上述方法
}
あなたはクラスが抽象的であるならば、それはまた、ある抽象的でなければならないので、飲食の方法で、抽象クラスの人間を定義する場合、私は、これは彼が食べて、飲み物、彼は知ることができないことだけで、個人的なことを知っています食べて、飲んする方法について説明します。あなたが食べると飲み物する方法を知りたい場合は、この男に固有でなければなりません。あなたが特にこの人は誰でも見つけることが起こっているかを知りたい場合は、私たちは、抽象クラスを継承するサブクラスのオブジェクトにする必要があります。
そう
abstract class Human(var name:String)
{
abstract fun eat()
abstract fun drink()
}
サブクラスのインスタンスで、あなたはこの人がどのような具体的な行動を食べ、飲み物知っていることが作成されます
class Man:Human(name=String())
{
override fun eat()
{
println("细嚼慢咽")
}
override fun drink()
{
println("大口喝水")
}
}
私たちは、インターフェイスを定義する場合:
interface eatdinner
{
fun eatdinner(name:String)
}
このインタフェースは、この動作をeatdinner実装するために使用されますが、私たちはクラス変数を呼び出すために、このインターフェイスを呼び出していない場合、このインターフェイスは、インスタンス化することはできません。だから、必要があります
class Man:Human(name=String()),eatdinner //要注意的是继承抽象类需要类名(),方法只需要名字
{
override fun eat()
{
println("细嚼慢咽")
}
override fun drink()
{
println("大口喝水")
}
override fun eatdinner(name:String)
{
println("影响均衡的吃")
}
}
図2に示すように、抽象クラスはサブクラスによって継承されるように、インターフェースクラスを実現することができます。
実施例又は上記サブコードによっては、抽象クラスはよくプロパティとメソッドを定義し、人間によって定義された抽象クラスおよびサブクラスは、プロパティおよびメソッドを有する者をインスタンス化。インタフェースは、クラスと呼ばれた後、しかし、それは特定の動作を達成することです。人の定義、人間が食べると飲むことができるようです。しかし、特定のジョブのアクションを行うための特別な人であることをゲームに、この動作を釣りしようとしている場合。
3、インタフェースが唯一の方法の特許請求の範囲によって行うことができ、抽象クラスは、あなたが達成するための方法を行うことができないメソッドを宣言することができます
abstract class Human(var name:String)
{
fun eat() //eat就是方法实现
{
println("用嘴吃")
}
abstract fun drink() //drink是方法申明
}
この方法は、達成するために使用される場合は、上記の例では、私は食べて口を定義する必要があるかのようにサブクラス継承、オーバーライドすることができないが、私は夕食の耳を書き換えることはできません。
interface eatdinner
{
fun eatdinner()
{
println("自由实现")
}
}
この方法は、内部インターフェイスも達成することができる定義することができ、その効果は、変更可能または変更されないかもしれません断言です。しかし、抽象クラスのメソッドは、達成したら、変更されていません。
class Man:Human(name=String()),eatdinner //要注意的是继承抽象类需要类名(),方法只需要名字
{
override fun drink() //所以在这里就不需要重写 eat也不能重写eat
{
println("大口喝水")
}
override fun eatdinner(name:String)
{
println("营养均衡的吃")
}
}
fun main(args: Array<String>) {
var man1=Man()
man1.eat()//结果为用嘴吃
man1.drink()//结果为大口喝水
man1.eatdinner("11")//结果为营养均衡的吃
}