JAVAの継承、抽象化、インターフェースの概要

01 相続

1. サンプルコード

public class Account {
    
    

  public String username = "小程";
  private String password = "123";

  //Account的构造方法
  public Account(){
    
    
    System.out.println("Account的构造方法");
  }

  //Account的普通方法
  public void hello(){
    
    
    System.out.println("欢迎登陆");
  }
}
class MyAccount extends Account {
    
    

  //MyAccount的构造方法
  public MyAccount(){
    
    
    System.out.println("MyAccount的构造方法");
  }

  public static void main(String[] args) {
    
    
    MyAccount myAccount =  new MyAccount();
    myAccount.hello();
    System.out.println(myAccount.username);
    //System.out.println(myAccount.password); //报错:不能访问父类private成员变量
  }
}

2. 走行結果

Account的构造方法
MyAccount的构造方法
欢迎登陆
小程

3. まとめ

1. サブクラスには、親クラスの非プライベートなプロパティとメソッドがあります。
2. サブクラスは独自のプロパティとメソッドを持つことができます。つまり、サブクラスは親クラスを拡張できます。
3. サブクラスは、親クラスのメソッドを独自の方法で実装できます。
4. Java の継承は単一継承ですが、多重継承も可能です。単一継承とは、サブクラスが親クラスを 1 つだけ継承できることを意味します。多重継承とは、たとえば、クラス A がクラス B を継承し、クラス B がクラス C を継承することを意味します。関係によると、クラス C これはクラス B の親クラスであり、クラス B はクラス A の親クラスです。これは、Java の継承と C++ の継承を区別する機能です。
5.クラス間の結合を改善します(継承の欠点、結合が高いとコード間の結合が発生します)。

02 アブストラクト

1. サンプルコード

//抽象类
public abstract class Fruits {
    
    
  String name= "水果";

  //Fruits的构造函数
  public Fruits() {
    
    
    System.out.println("Fruits的构造函数");
  }

  //普通方法
  public void buy(){
    
    
    System.out.println("买水果吃~~");
  }

  //抽象方法
  public abstract void taste();
}
//继承抽象类
public class Peach extends Fruits {
    
    
  //Test的构造函数
  public Peach() {
    
    
    System.out.println("Peach的构造函数");
  }

  //实现抽象方法
  @Override
  public void taste() {
    
    
    System.out.println("桃子尝起来是甜的");
  }

  public static void main(String[] args) {
    
    
    Peach peach =  new Peach();
    peach.buy();
    peach.taste();
    System.out.println(peach.name);
  }
}

2. 実行結果

Fruits的构造函数
Peach的构造函数
买水果吃~~
桃子尝起来是甜的
水果

3. まとめ

1.抽象クラスはインスタンス化できません。インスタンス化された場合、エラーが報告され、コンパイルは成功しません。オブジェクトを作成できるのは、抽象クラスの非抽象サブクラスのみです
2.抽象クラスには必ずしも抽象メソッドが含まれる必要はありませんが、抽象メソッドを持つクラスは抽象クラスでなければなりません
3. 構築メソッドおよびクラスメソッド(staticで修飾したメソッド)は抽象メソッドとして宣言できません。
5.抽象クラスのサブクラスは、サブクラスが抽象クラスでない限り、抽象クラス内の抽象メソッドの具体的な実装を提供する必要があります。
5. インスタンス化できないため、継承によってのみ使用でき、サブクラスは 1 つの抽象クラスのみを継承できます

03 インターフェース

1. サンプルコード

public class Watermelom extends Fruits implements SellNum, RemainNum {
    
    
  //Watermelom的构造函数
  public Watermelom() {
    
    
    System.out.println("Watermelom的构造函数");
  }

  //实现抽象方法
  @Override
  public void taste(){
    
    
    System.out.println("西瓜实现继承抽象类的抽象方法");
  }

  public static void main(String[] args) {
    
    
    Watermelom watermelom =  new Watermelom();
    watermelom.buy();
    watermelom.taste();
    watermelom.haveAmount();
    watermelom.selloutAmount();
    System.out.println(watermelom.name);
  }


  //implements必须实现接口
  @Override
  public void haveAmount() {
    
    
    System.out.println("实现了RemainNum接口的抽象方法haveAmount");

  }

  @Override
  public void selloutAmount() {
    
    
    System.out.println("实现了selloutAmount接口的抽象方法selloutAmount");

  }
}
public interface SellNum {
    
    
  //接口中变量会被默认指定为 public static final (并且只能是 public)。
  public static final int sellNumber =3;
  //或者这样写int sellnum = 1;一样的,会被默认指定。

  //接口中方法会被默认指定为 public abstract(只能是public abstract)。
  public abstract void selloutAmount();
  //或者这样写一样的void sellFruits();会被默认指定。
}

public interface RemainNum {
    
    
  // 接口中变量会被默认指定为 public static final (并且只能是 public)。
  public static final int remainNumber = 1;
  // 或者这样写int remainNumber =7;一样的,会被默认指定。

  // 接口中方法会被默认指定为 public abstract(只能是public abstract)。
  public abstract void haveAmount();
  // 或者这样写一样的void haveAmount();会被默认指定。
}

2. 実行結果

Fruits的构造函数
Watermelom的构造函数
买水果吃~~
西瓜实现继承抽象类的抽象方法
实现了RemainNum接口的抽象方法haveAmount
实现了selloutAmount接口的抽象方法selloutAmount
水果

3. まとめ

1. インターフェイスを使用してオブジェクトをインスタンス化することはできません
2. インターフェースにはコンストラクターがありません
3.インターフェース内のすべてのメソッドは抽象メソッドである必要があります
4. インターフェイスには、静的変数と最終変数を除き、メンバー変数を含めることはできません。
5. インターフェースはクラスによって継承されませんが、クラスによって実装され、複数の実装はカンマで区切られます。
6. インターフェースは多重継承をサポートします

4. インターフェース特性

1. インターフェイス内の各メソッドも暗黙的に abstractであり、インターフェイス内のメソッドは暗黙的にpublic abstractとして指定されます(public
abstract のみ。他の修飾子はエラーを報告します)。
2.インターフェイスには変数を含めることができますが、インターフェイス内の変数は暗黙的にpublic static Final変数として指定されます(public のみにすることができ、
private で変更するとコンパイル エラーが報告されます)。
3.インターフェイス内のメソッドをインターフェイス内に実装することはできませんインターフェイス内のメソッドは、インターフェイスを実装するクラスによってのみ実装できます。

04 抽象クラスとインターフェースの違い

1.抽象クラス内のメソッドはメソッド本体を持つことができます。つまり、メソッドの特定の機能を実現できますが、インターフェイス内のメソッドは実現できません。
2.抽象クラスのメンバー変数はさまざまな型にすることができますが、インターフェイスのメンバー変数はpublic static Final 型のみにすることができます。
3.インターフェイスには静的コード ブロックと静的メソッド(静的で変更されたメソッド) を含めることはできませんが、抽象クラスには静的コード ブロックと静的メソッドを含めることができます
4.クラスは 1 つの抽象クラスのみを継承できますが、クラスは複数のインターフェイスを実装できます

おすすめ

転載: blog.csdn.net/qq_43010602/article/details/122160494