abstract の導入: 変更に使用できます: クラス (抽象クラス)、メソッド (抽象メソッド)
修正された抽象class :
①このクラスはインスタンス化できません(つまり、このクラスのオブジェクトを作成できません)
②単独ではインスタンス化できませんが、サブクラスは親クラスのコンストラクターを呼び出します。したがって、抽象クラスは
①抽象メソッドにはメソッドの宣言のみがあり、メソッド本体はありません。また、それが属するクラスは抽象でなければなりませんクラス。クラスが抽象クラスでない場合、このクラスはオブジェクトを作成でき、オブジェクトを作成できる場合は呼び出すことができるためです。逆に、抽象クラスには抽象メソッドを含めることはできません。
② サブクラスが親クラスの抽象メソッドをすべて書き換えればインスタンス化できますが、すべて書き換えていない場合はサブクラスも抽象クラスなのでabstractで変更する必要があります。
③Abstract を使用して、プライベート メソッド、静的メソッド、final キーワードで変更されたメソッド、final キーワードで変更されたクラスを変更することはできません。
Final は明らかに継承できませんが、abstract はサブクラスの継承が必要なので使用できません。両方のメソッドが静的である場合、2 つのメソッドはオーバーライドまたはオーバーライドされているとはみなされないため、静的メソッドの変更には abstract が使用されます。 . 上書きできません。
抽象アプリケーション
テンプレート メソッドの設計パターン。ソフトウェア開発でアルゴリズムを実装する場合、全体的な手順は非常に固定的かつ共通であり、これらの手順は親クラスで記述され、一部の不安定で不確実な部分はサブクラスによる実装のために抽象化できます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
|
最終変更クラス: このクラスは、String、System、StringBuffer などの他のクラスから継承することはできません
最終変更メソッド: このメソッドはオーバーライドできなくなりました。たとえば、オブジェクト クラスの getClass() です。
静的 Final は、プロパティの変更に使用されます。グローバル定数
最終変更変数 : この時の変数を定数と呼びます
final updated 属性 : 明示的な初期化、コードブロック内での初期化、コンストラクタ内での初期化の代入箇所を検討できます
final Modifiedローカル変数: 特に仮パラメータをfinalで変更する場合、仮パラメータが定数であることを示します。このメソッドを呼び出す際には、定数の仮パラメータに実パラメータを代入してください。一度代入すると、仮パラメータはメソッド本体内でのみ使用できます。ただし、再割り当てはできません
インターフェイスは、クラスと並列関係にあるインターフェイスを使用して定義されます
#インターフェイスとインターフェイスのメンバーの定義:
1. インターフェイス内のすべてのメソッドは抽象です。
2. インターフェイス内のメンバーが明示的に public としてマークされていない場合でも、それらはパブリック アクセス タイプです。
3. インターフェイス内の変数は、デフォルトで public static Final としてマークされますしたがって、インターフェイス Variables で定義された変数はグローバルな静的定数です。
4. 新しいインターフェイスを定義し、extends を使用して既存のインターフェイスを継承できます。
5. クラスを定義し、implements を使用してインターフェイス内のすべてのメソッドを実装できます。
6. 抽象クラスを定義し、実装を使用してインターフェイスにいくつかのメソッドを実装できます。
1. インターフェイスはインスタンス化できません
2. 実装クラスはインターフェイスのすべてのメソッドを実装する必要があります
3. 実装クラスは複数のインターフェイスを実装できます
4.インターフェイス内の変数はすべて静的定数です
クラスがインターフェイス内のすべての抽象メソッドをカバーする場合は、インスタンスを作成できます。クラスがサポートする場合は、インスタンスを作成できます。インターフェイス抽象メソッド内のすべての抽象メソッドをカバーしていない場合でも、クラスは依然として抽象クラスです。 Java クラスは複数のインターフェイスを実装できます。単一継承の欠点を補います。
クラス AA は BB を拡張します。インターフェイスとインターフェイスの間で CC、DD、EE
を実装します。中間継承は次のとおりです。可能であり、多重継承も可能です。インターフェイスの使用はポリモーフィズムを反映しています。インターフェイスは仕様であり、インターフェイス用のプログラミングです。
同じ点: インスタンス化できませんが、両方とも抽象メソッドを含めることができます
相違点:
1. Put抽象クラスとインターフェース(java7,java8)の定義と内部構造の説明
#2. クラス:単一継承、インターフェース:多重継承。 抽象クラスとインターフェイスの演習1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|
1 2 3 4 5 6 7 8 9 10 |
|
如果实现类实现了多个接口,而这个多个接口中定义了同名同参数的默认方法,在实现类没有重写方法的情况下会报”接口冲突“错误,此时需要重写。
如何在子类(或者实现类)调用父类、接口中被重写的方法? 接口.super.方法。
需要关注的问题:如何实例化成员内部类的对象:外部类Person,静态内部类Brain,非静态内部类Lungs,静态成员内部类:new 外部类.内部类()
1 |
|
非静态成员内部类:先造对象,对象.new 内部类()
1 2 |
|
如何在成员内部类中区分调用外部类的结构
形参直接调,所在类的用this.结构,外部类的用外部类.this.结构
成员内部类和局部内部类在编译以后都会生成字节码文件
成员内部类:外部类.内部类名.class
局部内部类:外部类.数字 内部类名.class
在局部内部类的方法中,如果调用局部内部类所在的方法中的局部变量,该局部变量必须用final关键字修饰(JAVA8之后可以不写出来,但仍然还是final的)
1 2 3 4 5 6 7 8 9 |
|
开发中局部内部类的使用
常用的局部内部类:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
|
Java允许将一个类A声明在另一个类B中,A为内部类,B为外部类
内部类的分类:成员内部类、局部内部类(方法内,代码块内,构造器内)
成员内部类
作为外部类的成员:可以调用外部类的结构,可以被static修饰
作为一个类:可以定义属性、方法、构造器,可以用final、abstract修饰,可以被继承
this.name//内部类的属性
Person.this.name//外部类的属性
以上がJava 抽象クラスとインターフェイスをマスターするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。