Aは、インスタンス化すべきでないパッケージcom.zhangguo.chapter5.s1を。
パッケージcom.zhangguo.chapter5.s1; / ** 動物園* / パブリック クラス動物園{ 公共の 静的な 無効メイン(文字列[] args)を{ 動物動物 = 新新アニマル(); animal.eat(); / ** 新しい新曲* / / ** LSP * / 動物犬 = 新しい新しい犬(); dog.eat(); } } / ** 動物* / クラス動物{ / ** 食べる* / 公共 ボイド食べる(){ のSystem.outを。 println("動物は食べる" ;) } } クラスキャット拡張動物{ / ** 食べ書き換える* / 公共 ボイド(){EAT のSystem.out.println( "猫の魚を" ;) } } クラス犬が拡張動物{ / *を* 食べる書き換え* / 公共 ボイド)(EAT { (のSystem.out.printlnを "犬の骨を食べます" ); } }
結果:
問題:
上記の例の動物抽象親クラスからわかるように、実際には、現実にそこに動物と呼ばれる実際のオブジェクトがありません、そして動物が可能にするだけの抽象的な概念です。
この場合、動物のみ親として、インスタンス化されるべきではなく、オブジェクト指向(OOP)は、このタイプの役割として作用している:抽象クラスインターフェース。
抽象クラスとインタフェースは、クラスのタイプよりも抽象的です。
まず、タイプはインスタンス化することはできません
インスタンス化すべきではありません上記の概念は、いくつかの種類に学ぶことができるから、それは意味がありません。
Javaの抽象クラスは、メンテナンスやコードの再利用をより助長しています。
1.抽象クラスはインスタンス化されたオブジェクトにはできませんので、あなたがそれを使用する前に達成するためにサブクラスが存在しなければならないので。ですから、コンポーネントのいくつかを置くことができることを抽象化の同じプロパティとメソッドを持っているので、それは、コードや手順の整備により助長しています。
同様のアセンブリが生成されると2、抽象クラスは、抽象クラスのプロパティとメソッドに得ることができる実装だけ必要。
隠されたため、オブジェクト指向のアプローチでは、抽象クラス型が主に使用されています。抽象行動の固定セットの構成の説明が、このグループは、任意の可能な具体的な実装を行うことができます。この抽象的な記述は、抽象クラスであり、すべての可能な派生クラスのパフォーマンスの可能性のある具体的な実現の任意の数のこのグループ。モジュールは、抽象的で動作することができます。それは変更することができないので、モジュールは、固定された抽象化に依存するため、同じ時間に、このモジュールの抽象から導出することにより、この動作機能のために拡張することができます。最も基本原則OCP(オープンクローズ原理)オブジェクト指向設計の一つを達成するために、抽象クラスは、鍵の一つです。
(1)、インターフェース
(2)抽象クラス
(3)、コンストラクタへのアクセスはプライベートです
パッケージcom.zhangguo.chapter5.s1; / ** インターフェースを食べる* / 界面Ieatable { ボイド(EAT); } / ** 動物抽象クラス* / 抽象 クラス動物{ / ** 抽象メソッドを食べる* / パブリック 抽象 ボイドEAT( ); } / ** 学生の一般的なクラス* / クラスの生徒{ / ** プライベートコンストラクタ* / プライベート学生(){ } } パブリック クラスNoInstance { 公共の 静的な 無効メイン(文字列[]引数){ Ieatable OBJ1= 新新 Ieatable(); // エラーインタフェースはインスタンス化できない 動物obj2が= 新しい新アニマル(); // エラーがインスタンス化する抽象クラスができない 学生OBJ3 = 新しい新しい学生は(); // エラーがクラスのプライベートコンストラクタをインスタンス化することはできません } }
静的クラスの言語の中には、C#など、インスタンス化することはできません
意味:より抽象的な、より安定し。抽象上部構造は、定義されたトップレベルの設計を標準化することができます。要約は、自由に変更する必要がありません。
第二に、抽象クラス
2.1構文定義
抽象クラス定義は、抽象クラス抽象キーワード変更の使用前に、このクラスは抽象クラスです。
2.2使用
、いくつかのケースでは、親はそれは、サブクラスのメソッドが含まれている必要があり、どれだけ知っている、しかし、あなたはこれらのサブクラスのこれらのメソッドを実装する方法を正確に知ることができない
サブクラスがどのような方法で抽象クラス制約でなければならない(が、それは懸念の子供をしませんどのようにこれらのメソッドを実装するクラスです。)
B、抽象クラス、このサブクラスを有するテンプレート、設計のサブクラスを避けるランダムするようになどの抽象クラスを抽象化と同じ特性を有する複数のクラスから。
2.3、意味
制限事項サブクラスは特定のメソッドを実装する必要がありますが、実装の詳細を気にしません。
2.4特長
図1に示すように、抽象クラスの特定の抽象メソッド
2、抽象メソッドや抽象クラスは、キーワードを変更する必要があります
3、抽象クラスは、新規でオブジェクトを作成することはできません。無意味4、使用する抽象クラス、抽象メソッドと呼ばれる抽象メソッドなので、サブクラスオブジェクトの呼び出しを作成し、すべての抽象メソッドからサブクラスによって上書きされなければなりません。
サブクラスが唯一の抽象メソッドの一部を覆っている場合、これは抽象クラスのサブクラスです。
5、無メソッド本体抽象メソッド、セミコロンで終わりがあります
例:
package com.zhangguo.chapter5.s2; import java.util.Scanner; /** 动物 */ public abstract class Animal { /** 名称 */ public String name; /** 抽象方法,无方法体,必须被子类实现(重写) */ public abstract void eat(); /**测试*/ public static void main(String[] args) { //LSP 里氏替换原则 Animal dog=new Dog(); dog.name="博美"; //int i=1; //Scanner input=new Scanner(System.in); dog.eat(); } /**抽象类中可以有非抽象方法,可以有静态方法*/ public void show(){}; } /**抽象类动物(Animal)的子类,必须实现父类未实现的方法*/ class Dog extends Animal { //注解 @Override public void eat() { System.out.println(this.name+"狗在吃骨头"); } }
运行结果:
三、接口
接口是一组没有实例的标准与规范。
没有接口的电脑是怎样的?
3.1、为什么需要接口
继承:描述事物的自然属性和行为的复用。
接口:描述事物的社会属性和行为的复用。
1、重要性:在Java语言中, abstract class 和interface 是支持抽象类定义的两种机制。正是由于这两种机制的存在,才赋予了Java强大的 面向对象能力。
2、简单、规范性:如果一个项目比较庞大,那么就需要一个能理清所有业务的架构师来定义一些主要的接口,这些接口不仅告诉开发人员你需要实现那些业务,而且也将命名规范限制住了(防止一些开发人员随便命名导致别的程序员无法看明白)。
3、维护、拓展性:比如你要做一个画板程序,其中里面有一个面板类,主要负责绘画功能,然后你就这样定义了这个类。
4、安全、严密性:接口是实现软件松耦合的重要手段,它描叙了系统对外的所有服务,而不涉及任何具体的实现细节。这样就比较安全、严密一些(一般软件服务商考虑的比较多)。
因为类具有“单根性”,所有的类只能有一个直接父类,通过可以实现一个类有多个父类,可以实现多重继承。
package com.zhangguo.chapter5.s2; /**usb接口*/ public interface IUSB { /**未实现的方法,发送数据*/ void sendData(); } /**网线接口*/ interface IRJ45 { /**未实现的方法,接收数据*/ void receiveData(); } /**设备*/ class Device{ } /**电脑*/ /**一个类只能继承一个类,但可以实现多个接口*/ class Computer extends Device implements IUSB,IRJ45{ @Override public void receiveData() { System.out.println("接收数据"); } @Override public void sendData() { System.out.println("发送数据"); } interface IA{} interface IB{} /**接口可以继承其它他口*/ interface IC extends IA,IB{} class CC{} /**继承需要写在实现接口前*/ class DD extends CC implements IC {} }
测试:
package com.zhangguo.chapter5.s2; public class ComputerClient { public static void main(String[] args) { Computer ln=new Computer(); ln.sendData(); ln.receiveData(); /**接口是一种类型*/ IUSB usb=new Computer(); /**一个对象可以有多个不同的类型*/ } }
3.2、接口的特点
1)、接口中的方法可以有参数列表和返回类型,但不能有任何方法体。
2)、接口中可以包含字段,但是会被隐式的声明为static和final。
3)、接口中的字段只是被存储在该接口的静态存储区域内,而不属于该接口。
4)、接口中的方法可以被声明为public或不声明,但结果都会按照public类型处理。
5)、当实现一个接口时,需要将被定义的方法声明为public类型的,否则为默认访问类型,Java编译器不允许这种情况。
6)、如果没有实现接口中所有方法,那么创建的仍然是一个接口。子类必须实现接口中未实现的方法,除非子类也是接口。
7)は、新しいインタフェースは、キーワードが延び使用する必要が生成するインタフェースを拡張し、実装を使用してインターフェイスを実装します。
8)、インタフェース・メソッドは、静的メソッド(静的))、このように、静的メソッドがオーバーライドすることはできませんが、すべてのインタフェースのメソッドが抽象的であり、抽象メソッドは静的ではないことができない、(要約)抽象メソッドでありますインターフェース作るセンスを定義します。
Interfaceフィールドは、デフォルトでは次のとおりです。静的な最終、人気のことわざが一定であります
四、ファイナル(最終)
4.1、最終修飾クラス
最終修正クラスは継承することはできません。
このクラスは、最終的な、だけでなく、抽象的、両方にすることはできません。主な目的は、大会の抽象を定義することであるので、子クラスは、最終クラスが継承することはできません2つの競合を表し、この大会を、実装することができます。
4.2、最終的な修正方法
最終的修飾法、表現はサブクラスを上書きしません、このメソッドをオーバーライドします。それは書き換えることができません
4.3、変数の最終修正
最後のメンバ変数は定数を表し、割り当てられた値が変化しないの後、一度だけ割り当てられることができます。
場合、ネイティブのデータ型の最終的な修正、変更のネイティブ・データ・タイプが発生しないことを示す値。
参照型の最終的な改変は、参照型は他のオブジェクトを指すことができることを示す、しかし、もしオブジェクトへの参照点の内容は変化が起こることができます。
基準値は、アドレス、最終的に必要な値であるので、本質的に同一のもの、すなわち、アドレスの値は変化しません。
メンバ変数(プロパティ)の最終修正を初期化し、表示する必要があります。
宣言時に初期化されている変数を初期化するには、2つの方法がありますが、第2の方法は、あなたが変数を宣言する時の初期値ではありませんが、この変数のコンストラクタクラスのすべてに、この変数に割り当てます初期値。
関数パラメータであることを示す、パラメータタイプは、最終的な宣言されると、読み取り専用タイプ。
第五に、ビデオやサンプルのダウンロード
第六に、顔の質問
1、Javaはその型をインスタンス化することはできませんか?
2.抽象クラスの特徴は何ですか?
3.インタフェースの特徴は何ですか?