Javaの継承の概要
クラス1の複数の同じ特性の存在および動作は、これらの内容は、単一のクラスに引き込ま場合、そのクラスであれば、そのクラスを継承することができるように、これらの同じ特性および挙動の複数を定義する必要はありません。
Javaクラスとクラスの継承2.キーワード拡張を介して達成することができます。
例えば:class 子类名 extends 父类名 {}
3.別のクラスは、親クラスは、ベースクラスまたはスーパークラスと呼ばれ、それは複数のクラスまたはサブクラス派生クラスと呼ばれてもよいです。
4.将来の継承では、我々はあなたが上の既存のクラスに基づいて、あなたはまた、独自の新しいメンバーを定義することができ、クラスを定義
継承クラスのフォーマット
キーワード延び継承別のクラスの一般的な形態から、以下の通りであることにより、Javaでは、クラスを宣言することができます。
class 父类 {
}
class 子类 extends 父类 {
}
継承の場合
、動物の親の
ublic class Animal {
private Integer age; //
public Animal(){
System.out.println("Animal construct method");
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public void eat(){
System.out.println("eat food");
}
}
Gouziクラス
public class Dog extends Animal{ //class 子类名 extends 父类名
private String color; //毛色, /可以定义特有属性
public Dog(String color){ //可以定义特有属性
this.color = color;
}
public void run(){ //可以定义特有属性
System.out.println("Dog is running");
}
@Override
public void eat(){
System.out.println("dog eat bone"); //可以重写父类有的方法
}
}
継承特性
- サブクラス親クラスには、民間のプロパティ、メソッドを持っていません。
- サブクラスは、サブクラスは親クラスを拡張することができ、自分の属性とメソッドを持つことができます。
- サブクラス親クラスは、独自の方法で実装することができます。
- Javaの単一継承は継承されますが、多重継承、単一継承では、サブクラスは、親クラスから継承することができるということです、多重継承は、例えば、クラス継承クラスB、CクラスB継承され
たクラス、その関係は、クラスCであるBに従ったものです親クラスは、C ++、Javaが機能を継承異なるクラスBクラス、親クラスです。 - クラス間の結合向上させるために(継承された欠点を、それが悪いことより密接コード間の結合、コードの独立性の高い原因となります)
2つのコードを見ることができることから、コードの重複があり、その結果を結果すると、コードが大きいと肥大化しているということですが、ない高いメンテナンス(保守が主に後半の時間を変更するには、あなたは多くのコードを変更する必要があり、エラーが発生しやすいです)、その根本的な問題を解決するために、コードのこれら2つから、我々は同じメソッドとプロパティは、あなたが繰り返しに持っていない場合は、コードの2枚の同じ部分の親を形成するために抽出され、継承する必要
継承の種類
このキーワードでスーパー
superキーワード:私たちは、現在のオブジェクトの親を参照するために使用されるスーパーキーワードで親クラスのメンバーへのアクセスを可能にすることができます。
このキーワード:自分自身への参照。
class Animal {
void eat() {
System.out.println("animal : eat");
}
}
class Dog extends Animal {
void eat() {
System.out.println("dog : eat");
}
void eatTest() {
this.eat(); // this 调用自己的方法
super.eat(); // super 调用父类方法
}
}
public class Test {
public static void main(String[] args) {
Animal a = new Animal();
a.eat();
Dog d = new Dog();
d.eatTest();
}
}
業績
animal : eat
dog : eat
animal : eat
finalキーワード
最終的なクラスを宣言するキーワードは、クラスが継承することができないように、最終的なクラスである、定義することができ、またはサブクラスでオーバーライドすることができない方法を変更するため。
声明カテゴリ:
final class 类名 {//类体}
声明方法:
修饰符(public/private/default/protected) final 返回值类型 方法名(){//方法体}
抽象クラス
抽象クラス
- 抽象クラスに加えて、インスタンス化オブジェクトは、他の機能的なクラスがまだ存在して、メンバ変数、メソッドおよびメンバーのコンストラクタは、通常のクラスと同じようにアクセスしません。
- 抽象クラスは、抽象クラスを継承しなければならないオブジェクトをインスタンス化することはできませんので、それを使用することができます
- 抽象クラスは、一般的に、親として採用されていますが、サブクラスが達成できるようにする抽象メソッドがあることができます。
- abstract修飾子は、クラスは抽象クラスであることを示し、
-
- 抽象クラス区分と一般的なクラス:が抽象クラス抽象メソッドであってもよい(のみ定義される方法、なしメソッド本体、及び抽象クラスをインスタンス化できない)
抽象メソッド
- 抽象クラス区分と一般的なクラス:が抽象クラス抽象メソッドであってもよい(のみ定義される方法、なしメソッド本体、及び抽象クラスをインスタンス化できない)
- あなたがこの方法の特別なメンバーが含まれているようなクラスを設計したい場合は、この方法の具体的な実装は、そのサブクラスによって決定され、その後、親クラスの抽象メソッドとして、このメソッドを宣言することができます。
- 同じキーワードが抽象メソッドを宣言するために使用することができ、抽象、抽象メソッドは、メソッド名、および無メソッド本体が含まれています。
- 抽象メソッドはなく、直接波括弧のセミコロンを持つメソッド名の後ろに、定義されていません。
抽象クラス宣言
public abstract class AbstractPerson {
public String name;
public int age;
//abstract 声明这个方法是一个抽象方法
public abstract void say();
public void eat() {
System.out.println("正在吃饭......");
}
}
サブクラスは、抽象クラスを継承しています
public class JapaneseExtendsAbstractPerson extends AbstractPerson{
/**
* 子类中必须实现抽象类中的抽象方法
*/
@Override
public void say() {
System.out.println("雅蠛蝶");
}
}
要旨は、の規定をまとめたもの
-
抽象クラスは、コンパイラは渡すことはできません(初心者が簡単にミスをしたため)、それがインスタンス化されるならば、それはエラーになりますインスタンス化することはできません。唯一の抽象クラス非抽象サブクラスは、オブジェクトを作成することができます。
-
抽象クラスは必ずしも抽象メソッドが含まれていませんが、抽象クラスでなければならないクラスの抽象メソッドがあります。
-
メソッド抽象クラスだけで体を持たない抽象宣言し、与えられていないメソッドの実装方法は、特定の機能です。
-
コンストラクタは、(修飾された静的メソッドを使用して)クラスメソッドが抽象メソッド宣言することはできません。
-
抽象クラスのサブクラスはサブクラスが抽象的でない限り、抽象メソッドは、特定の抽象クラスを与える実装する必要があります。
異常と例外処理
構造異常
1.すべての例外はThrowableのから継承されている、それはすべての例外の共通の祖先です。
2.Throwableは2つのサブクラス、エラーや例外があります。エラー:エラーが異常ではありませんが、プログラマから問題を制御します。エラーは通常、コードでは無視されます。スタックオーバーフローは、エラーが発生した場合、例えば、それらは、コンパイル時にチェックすることができません
3.Exceptionは、別の非常に重要な例外クラスです。これは、例外は、それ自体が処理できるプログラムの異常です提供します。エラー差が異常であると、異常が処理することができ、そしてエラーは処理されません。**
4は例外をチェックする:チェック例外の最も代表的には、ユーザー・エラーや問題に、それは予測不可能なプログラマであるため、例外です。あなたは、ファイルを開きたい場合などの例外が発生し、存在しない場合、例外は単にコンパイル時に無視することはできません。
例外5つの実行:例外は、実行時例外を回避するために、プログラマである可能性が高いです。異常の検査とは対照的に、例外は、コンパイル時の実行時に無視することができます。
6.Exceptionはとても珍しい親である、あなたはすべての例外をキャッチすることができます
例外発生には多くの理由がありますが、通常は次のカテゴリが含まれています。
-
不正なユーザ入力データ
-
存在しないファイルを開くには。
-
接続されたネットワーク通信割り込み、またはJVMのメモリのオーバーフロー。
他の物理的なエラーがあるので、ユーザー・エラーが原因のいずれかのこれらの異常は、いくつかの手続きのエラーが発生する原因。
一般的な例外
。例外の下でのjava.lang *:
1、のjava.lang.NullPointerException
NULLポインタの例外は:初期化されていないオブジェクトを呼び出すか、オブジェクトが存在していません。
2、にjava.lang.ClassNotFoundException
異常なクラスが存在しません:クラスの名前とパスが正しくありません。
3、java.lang.NumberFormatException
数異常に文字列。
4、java.lang.IndexOutOfBoundsException
配列の添字は、例外の境界。
5、java.lang.IllegalArgumentExceptionが
無効なパラメータエラー。
6、java.lang.IllegalAccessExceptionが
いいえアクセス例外はありません。
7、java.lang.ArithmeticException
数学例外。
8、java.lang.ClassCastExceptionが
データ型変換の例外。
9、java.lang.InterruptedException
割り込み例外を通します。
10、java.lang.OutOfMemoryException
コンテンツの異常な欠如。
11、java.lang.NoClassDefFoundException
クラスは、例外を定義されていません。
12、java.lang.NoSuchMethodException
例外のメソッドは存在しません。
13、java.lang.NoSuchFiledException
異常なプロパティが存在しません。
java.io. *下の例外:
14、にjava.io.IOException
入力と出力の例外。
15、java.io.FileNotFoundException
異常なファイルが存在しません。
。Java.net *例外の下で:
16、Java.net.ConnectException
ネットワーク接続の例外。
17、Java.net.SocketTimeoutException
ネットワーク接続タイムアウト例外。
。例外の下java.rmiで*:
18、Java.rmi.ServerRuntimeException
Serverが異常動作して。
。例外は下の持つjava.text *:
19、java.sql.SQLExceptionの
SQLの実行例外。
。例外は下の持つjava.text *:
20、Java.text.ParseException
翻訳例外。
例外をキャッチ
使用して、試してみて、キャッチキーワードは、例外をキャッチすることができます。try / catch例外が発生する可能性がありますどこのブロックが配置されます。
試しを使用して、保護コードと呼ばれる構文try / catchブロックのコードは/キャッチは、以下の
try
{
// 程序代码
}catch(ExceptionName e1)
{
//Catch 块
}
キャッチ例外をcatchステートメントは、ステートメントのタイプがあります。例外は保護されたコードブロックで発生した場合、以降のcatchブロックがチェックされますしてみてください。
異常が含まれるcatchブロックで発生した場合、例外がcatchブロックに転送され、これをメソッドにパラメータとして渡されます。
例
コードは、それが例外をスローしたときに、配列の3番目の要素にアクセスしようとすると、次の例では、2要素アレイを宣言しました。
// 文件名 : ExcepTest.java
import java.io.*;
public class ExcepTest{
public static void main(String args[]){
try{
int a[] = new int[2];
System.out.println("Access element three :" + a[3]);
}catch(ArrayIndexOutOfBoundsException e){
System.out.println("Exception thrown :" + e);
}
System.out.println("Out of the block");
}
}
コンパイル結果
Exception thrown :java.lang.ArrayIndexOutOfBoundsException: 3
Out of the block
複数のキャプチャブロック
tryブロックは、複数のブロックは、複数のキャプチャーと呼ばれるキャッチケースの後ろに続きます。
複数のキャプチャブロックの構文は次のとおりです。
try{
// 程序代码
}catch(异常类型1 异常的变量名1){
// 程序代码
}catch(异常类型2 异常的变量名2){
// 程序代码
}catch(异常类型2 异常的变量名2){
// 程序代码
}
上記のコードセグメントは、三個のキャッチブロックを含みます。
あなたは、try文の後にcatchブロックの任意の数を追加することができます。
例外は保護コードで発生した場合、例外は最初のcatchブロックにスローされます。
それがない場合は、キャプチャされるデータ型ExceptionType1を、一致します。
そうでない場合、それは、第二のcatchブロックに送信されます。
このように、すべての例外までキャッチまたはブロックでキャッチされています。
例
この例では、複数のtry / catchを使用する方法を示します。
try {
file = new FileInputStream(fileName);
x = (byte) file.read();
} catch(FileNotFoundException f) { // Not valid!
f.printStackTrace();
return -1;
} catch(IOException i) {
i.printStackTrace();
return -1;
}
ついにキーワード
最終的にはコードブロックは試して実行された後のコードブロックを作成するキーワード。
異常が発生したかどうかは、最終的にブロックコードは常に実行されます。
finallyブロック、クリーンタイプなどで書類のリハビリテーション自然を終了実行することができます。
最後に、最終的なcatchブロックに表示されますをブロックする以下のように、構文は次のとおりです。
try{
// 程序代码
}catch(异常类型1 异常的变量名1){
// 程序代码
}catch(异常类型2 异常的变量名2){
// 程序代码
}finally{
// 程序代码
}
例
public class ExcepTest{
public static void main(String args[]){
int a[] = new int[2];
try{
System.out.println("Access element three :" + a[3]);
}catch(ArrayIndexOutOfBoundsException e){
System.out.println("Exception thrown :" + e);
}
finally{
a[0] = 6;
System.out.println("First element value: " +a[0]);
System.out.println("The finally statement is executed");
}
}
}
次のように結果をまとめ上記の例は次のとおりです。
Exception thrown :java.lang.ArrayIndexOutOfBoundsException: 3
First element value: 6
The finally statement is executed
次の考慮事項に注意してください。
キャッチは、独立して試してみるの存在することはできません。
追加finallyブロックは、try /キャッチの後ろでは必須ではありません。
トライcatchブロックの後どちらもfinallyブロックすることはできません。
finallyブロックの間で任意のコードを追加することはできません、キャッチ、試してみてください。
例外を投げます
直接投げJVM例外:つまり、mainメソッドでは、コードはのtry-catchのための異常である可能性が表示されません。
例外上部の発信者を投げることができる基礎となる方法
例:メソッドの定義、商、法の文はあなたがこれを呼び出すときにこの方法はのtry-catchを使用することを許可思い出させますが、例外がスローされます
public static int divide(int a,int b) throws Exception{
return a/b;
}
次に、2つのケースが使用されている
I.を、あなたは投げ続けることを選択することができます
// divide方法的调用者就能获得提示:如何处理异常
// 可以选择继续往上抛
main thows Exception {
divide(5,0);
}
ケース2、あなたはまた、外に投げられない、例外をキャッチするために選択することができます
main{
try{
divide(5,0);
}catch(Exception e){
sysout(e.getMessage());
}
}