class A{} class B extends A{}
class A{} class B{} class C extends A,B{} //C類不能夠同時繼承A類和B類
①子類覆蓋父類,必須保證權限要大於或等於父類的權限。html
②靜態覆蓋靜態。java
③寫法上必須如出一轍,函數的返回值類型 函數名 參數列表都要同樣。編程
三、super關鍵字網絡
①若是子類的構造函數第一行寫了this調用了背離其餘構造函數,那麼super調用父類的語句是沒有的,由於this()或者super(),只能在構造函數的第一行,由於初始化動做要先執行。jvm
②父類構造函數中是否有隱式的super呢?也是有的,只要是構造函數默認第一行都是super();ide
②只要使用父類的指定初始化動做,就在子類中經過super(參數列表)格式進行調用。函數
①使用super關鍵字調用父類的成員變量和成員方法。具體格式:工具
②使用super關鍵字調用父類的構造方法,具體格式:post
①final修飾的類是一個最終類,該類將不能被繼承,不能派生子類。學習
③final修飾的變量是一個常量,只能被賦值一個。
如:final int num = 2;
①抽象類和抽象方法都須要被abstract修飾。(抽象方法必定要定義在抽象類中)。
//定義抽象類Animal abstract class Animal{ //定義抽象方法shuot() abstract int shout (); }
②抽象類不能夠建立實例,緣由:調用抽象方法沒有方法體。
③只要覆蓋了抽象類中全部的抽象方法後,其子類才能夠實例化。不然該子類仍是一個抽象類。
1 interface Animal{ 2 int ID = 1; //定義全局變量 3 void breathe(); //定義抽象方法 4 void run (); 5 } // Animal 即爲一個接口,接口中定義的的方法和變量都包含一些默認修飾符「public abstract」(抽象方法)「public static final」(全局變量)。
①接口能夠建立對象;
②子類必須覆蓋掉接口中全部的抽象方法後,子類才能夠實例化。不然子類是一個抽象類。
③實現多接口示例:
interface Run{ 程序代碼….. } interface Fly{ 程序代碼….. } class Bird implements Run,Fly{ 程序代碼……. }
class Dog extends Canidae implements Animal{ //先繼承,再實現 程序代碼…… }
1 //定義接口Animal 2 interface Animal{ 3 void shout(); 4 } 5 //定義Cat類實現Animal接口 6 class Cat implements Animal{ 7 //實現shout()方法 8 public void shout(){ 9 System.out.println("喵喵..."); 10 } 11 } 12 //定義Dog類型實現Animal接口 13 class Dog implements Animal{ 14 public void shout(){ 15 System.out.println("汪汪"); 16 } 17 } 18 //定義測試類 19 public class Example13 { 20 public static void main(String[] args) { 21 Animal an1 =new Cat();//建立Cat對象,使用Animal類型的變量an1引用 22 Animal an2 =new Dog();//建立Dog對象,使用Animal類型的變量an2引用 23 animalShout(an1); //調用animalShout()方法,將an1做爲參數傳入 24 animalShout(an2); //調用animalShout()方法,將an2做爲參數傳入 25 } 26 public static void animalShout(Animal an) { 27 an.shout(); 28 } 29 }
運行結果
喵喵… 汪汪
Animal a = new Dog(); a.eat(); Dog d = (Dog)a; //將a轉型爲Dog 類型。向下轉型。 d.lookHome();
if(a instanceof Cat){ //a指向的對象的類型是Cat類型。 //將a轉型Cat 類型。 Cat c = (Cat)a; c.catchMouse(); }else if(a instanceof Dog){ Dog d = (Dog) a; d.lookHome(); }
1 interface Animal{ 2 void shout();//定義抽象方法shout() 3 } 4 //定義Cat類實現Animal接口 5 class Cat implements Animal{ 6 //實現抽象方法shout() 7 public void shout(){ 8 System.out.println("喵喵..."); 9 } 10 //定義sleep()方法 11 public void sleep(){ 12 System.out.println("貓在睡覺....."); 13 } 14 } 15 //定義Dog類實現Animal接口 16 class Dog implements Animal{ 17 //實現抽象方法shout() 18 public void shout(){ 19 System.out.println("汪汪..."); 20 } 21 } 22 //定義測試類 23 public class Example14 { 24 public static void main(String[] args) { 25 Animal dog = new Dog(); //建立Dog類的實例對象 26 animalShout(dog); //調用animalShout()方法,將dog做爲參數傳入 27 } 28 public static void animalShout(Animal animal) { 29 if (animal instanceof Cat) { 30 Cat cat = (Cat) animal;//將animal對象強制裝換爲Cat類型 31 cat.shout(); //調用cat的shout()方法 32 cat.sleep(); //調用cat的sleep()方法 33 }else{ 34 System.out.println("this animal is not a cat!"); 35 } 36 } 37 }
運行結果:
this animal is not a cat!
①何時向上轉型?
②何時向下轉型?
new 父類(參數列表)或父接口(){ // 匿名內部類實現部分 }
示例
1 interface Animal{ 2 void shout(); 3 } 4 public class Example18 { 5 public static void main(String[] args) { 6 animalShout(new Animal(){ 7 public void shout() { 8 System.out.println("喵喵..."); 9 } 10 }); 11 } 12 public static void animalShout(Animal an) { 13 an.shout(); 14 } 15 }
運行結果
喵喵...
1 class Animal{ 2 /*//定義動物叫的方法 3 void shout(){ 4 System.out.println("動物叫"); 5 }*/ 6 //重寫Object類中的toString()方法 7 8 @Override 9 public String toString() { 10 return "I am an animal!"; 11 } 12 } 13 //定義測試類 14 public class Example16 { 15 public static void main(String[] args) { 16 Animal animal = new Animal(); //建立Animal類對象 17 System.out.println(animal.toString()); //調用toString()方法並打印 18 } 19 }
5、異常
一、Throwable類的繼承體系
運行時異常:RuntimeException類即其子類都是運行時異常,編譯器不會檢測的異常,不須要聲明。
Throwable經常使用方法 | |
方法聲明 | 功能描述 |
String getMessage() | 返回此throwable的詳細消息字符串 |
void printStackTrace() | 將此throwable及其追蹤輸出至標準錯誤流 |
void printStackTrace(PrintStream s) | 將此throwable及其追蹤輸出至指定的輸出流 |
try{ //須要被檢測的語句 }catch(ExceptionType(Exception類及其子類) e) { //ExceptionType的處理 }
finally{ //必定會被執行的語句 }
示例
1 public class Example20 { 2 public static void main(String[] args) { 3 // 下面的代碼定義了一個try...catch語句用於捕捉異常 4 try { 5 int result = divide(4,0); //調用divide()方法 6 System.out.println(result); 7 } catch (Exception e) { //對異常進行處理 8 System.out.println("捕捉的異常信息爲" + e.getMessage()); 9 return; //用於結束當前語句 10 }finally { 11 System.out.println("進入finally代碼塊」); 12 } 13 System.out.println("程序繼續向下執行..."); 14 } 15 //下面的方法實現了兩個整數相除 16 public static int divide(int x,int y) { 17 int result = x/y; //定義一個變量result記錄兩個整數相除的結果 18 return result; //將結果返回 19 } 20 }
運行結果
捕獲的異常信息是:/by zero 進入代碼塊
在程序設計時,常常會在try...catch後使用finally代碼塊來完成必須作的事情,例如釋放系統資源。需注意,當try...catch中執行了System.exit(0)語句,則退出Java虛擬機,任何代碼都不能繼續執行。
①try catch :對代碼進行異常檢測,並對檢測的異常傳遞給catch處理。
Void show ()throws {//不須要throws try{ throw new Exception(); }finally{ } }
②try finally:對代碼進行異常檢測,檢測到異常後由於沒有catch,因此同樣會被默認jvm拋出。
Void show () {//須要throws try{ throw new Exception(); }finally{ } }
③try catch finally
④try catch1 catch2 catch3………
void show ()throws Exception{ throw new Exception(); }
1 class DivideByMinusException extends Exception{ 2 public DivideByMinusException(){ 3 super();//調用Exception無參的構造方法 4 } 5 public DivideByMinusException(String message){ 6 super(message);//調用Exception無參的構造方法 7 } 8 } 9 public class Example26 { 10 public static void main(String[] args) { 11 try{ 12 int result = divide(4,-2); 13 System.out.println(result); 14 }catch (DivideByMinusException e){ 15 System.out.println(e.getMessage()); 16 } 17 } 18 public static int divide(int x,int y)throws DivideByMinusException{ 19 if(y<0){ 20 throw new DivideByMinusException("被除數是負數"); 21 } 22 int result = x/y ; 23 return result; 24 } 25 }
import 包名.類名;
訪問控制級別 |
||||
同一類中 |
同一包下 (有無關係都可) |
不一樣包下(子類) |
不一樣包下 (沒有關係) |
|
private |
Y |
|||
default(默認) |
Y |
Y |
||
protected |
Y |
Y |
Y |
|
public |
Y |
Y |
Y |
Y |