1.抽象クラスおよびインターフェースの特性。
抽象クラス:共通機能を定義して抽象クラスを継承します。抽象クラスのすべての抽象メソッドを実装する必要があります。
- 抽象クラスと抽象メソッドの両方を抽象で変更する必要があります。抽象メソッドは抽象クラスで定義する必要があります
- 抽象クラスはオブジェクトを直接作成できません(理由:抽象メソッドを呼び出しても意味がありません)
- 抽象クラスのすべての抽象メソッドをカバーした後でのみ、そのサブクラスはオブジェクトを作成できます。それ以外の場合、サブクラスも抽象クラスでなければなりません。
インターフェース:スケーラビリティー。(誰がこの機能を必要とするか、誰にでも与える)
- 関数宣言のための特別なクラスが含まれています。
- 定義形式:パブリックインターフェイスインターフェイス名{}使用形式:クラスA実装インターフェイス名{}
- メンバー変数はインターフェースで定義できますが、変数は最終的な変数のみであり、静的です。デフォルトの修飾子:public static final。
- メソッドはインターフェースで定義できますが、抽象メソッドのみです。
- インターフェースにはコンストラクタがなく、オブジェクトのペアを作成することはできません。
- サブクラスは、インスタンス化する前に、インターフェース内のすべての抽象メソッドをオーバーライドする必要があります。
2.詳細
抽象クラス
- 抽象クラスは親クラスでなければなりません
- 抽象メソッドは抽象クラスで定義できません(つまり、静的メソッドはサブクラスで直接使用できます)
- キーワードは、privateおよびfinalでは使用できません。(最終的に宣言されたクラスはサブクラスを持つことができず、プライベートなクラスは上書きできません)
インターフェース
- 複数の継承は、複数の継承のために複数のインターフェース間で使用できます
- クラスは複数のインターフェースを実装できます
コード例:
package day0526;
/**
* 1、类可以实现多个接口
* 必须实现接口的所有抽象方法
* 注:可以实现部分方法,但该类必须是抽象类
* 2、接口可以实现多继承
*/
//多实现
public class demo1 implements Inter1,Inter {
public void show(){
}
}
//多继承
interface Inter extends Inter1,Inter2{
//定义变量默认修饰符public static final
int a=10;
//定义方法默认修饰符public abstract
void show();
//接口中不允许有构造方法
}
interface Inter1{
}
interface Inter2{
}
2つの選択
- 最初にインターフェイスを選択し、抽象クラスをできるだけ使用しない
- サブクラスの動作を定義する必要があり、抽象クラスを選択する前に、サブクラスに共通の機能を提供する必要があります。
3.ケース:
これを達成するには、まずそれを分析します。
次に、画像を描画して、それらの間の関係、各オブジェクト間の接続、およびそれらのプロパティとメソッドを分析します。
分析後、コードを使用して達成します。
//インターフェースを定義します
インターフェースLearnenglish {
公開抽象void learnspeaking();
}
//パブリック抽象クラス(人)
抽象クラスPerson1 {
プライベート文字列名。
私有年齢;
public Person1(String name、int age){
this.name = name;
this.age = age;
}
public void Print(){
System.out.println(name + "---" + age);
}
public abstract void eat();
public abstract void sleep();
}
//抽象クラス(アスリート)
抽象クラスAthleteはPerson1 {を拡張します
public Athlete(String name、int age){
super(name、age);
}
public void eat(){
System.out.println( "Eat health food。");
}
public void sleep(){
System.out.println( "早寝して早起き");
}
public abstract void learn();
}
//抽象クラス(コーチ)
抽象クラスCoachはPerson1 {を拡張します
public Coach(String name、int age){
super(name、age);
}
public void eat(){
System.out.println( "合理的な食事、あなたの体を守る");
}
public void sleep(){
System.out.println( "休息の法則");
}
パブリックアブストラクトvoidティーチ();
}
//特定のクラス(アスリート)
クラスPingPongは、アスリートを拡張してLearnenglishを実装します{
public PingPong(String name、int age){
super(name、age);
}
public void learn(){
System.out.println( "Learn Table Tennis");
}
public void learnspeaking(){
System.out.println( "英語を学ぶ!");
}
}
クラスバスケットボールはアスリートを拡張します{
public Basketball(String name、int age){
super(name、age);
}
public void learn(){
System.out.println( "学習バスケットボール");
}
}
//特定のクラス(コーチ)
クラスPingCoachはCoachを拡張してLearnenglishを実装します{
public PingCoach(String name、int age){
super(name、age);
}
public void tell(){
System.out.println( "ピンポンティーチング");
}
public void learnspeaking(){
System.out.println( "英語を学ぶ!");
}
}
クラスBasketCoachはCoachを拡張します{
public BasketCoach(String name、int age){
super(name、age);
}
public void tell(){
System.out.println( "バスケットボールティーチング");
}
}
//テストクラス
パブリッククラスMyproject1 {
public static void main(String [] args){
BasketCoach a = new BasketCoach( "yyy"、20);
a.Print();
a.eat();
a.sleep();
a.teach();
}
}
バスケットボールコーチのテストクラス:
演算結果:
卓球選手のためのテストクラス:
演算結果: