Q2:繼承java
java繼承的特徵this
1:傳遞性spa
若類C繼承類B,類B繼承類A(多繼承),則類C既有從類B那裏繼承下來的屬性與方法,也有從類A那裏繼承下來的屬性與方法,還能夠有本身新定義的屬性和方法。繼承來的屬性和方法儘管是隱式 的,但還是類C的屬性和方法。code
2:單根性對象
若類B繼承類A,那麼創建類B時只須要再描述與基類(類A)不一樣的少許特徵(數據成員和成員方法)便可。這種作法能減少代碼和數據的冗餘度,大大增長程序的重用性。blog
3:子類調用父類成員繼承
使用super關鍵字調用父類成員class
子類默認會先調用父類的無參構造方法,若是父沒有則報錯,能夠手動指定,但必須在第一行test
舉個例子:程序
package com.zhangyuwei.extend; public class test1 { /*繼承*/ public static void main(String[] args) { /** * private 私有的,只容許本類訪問 * public 公有的,容許全部類訪問 * protected 授權保護的,只容許子類訪問,同包訪問 * default 容許同一個包訪問 package,不寫訪問修飾符 **/ Dog dog=new Dog("黃毛","黑色",34.4); dog.show(); } } class Animal{ public String name; public String color; public Animal(){} public Animal(String name, String color) { this.name = name; this.color = color; } public void show(){ System.out.println("名稱:"+name+",顏色:"+color); } } class Dog extends Animal{ public double price; public Dog(String name,String color,double price){ super(name,color); this.price=price; } /*重寫父類的方法*/ public void show(){ super.show(); System.out.println("價格:"+price); } }
結果:
Q3:構造方法
構造方法概要
1:構造方法是建立對象時調用的方法,(實例化,new),析構方法
2:構造方法名與類名相同(如Book類的構造方法名稱必定Book)
3:構造方法沒有返回類型() public Book(){}
4:一個類若是不定義構造方法會默認有一個無參構造方法,若是用戶自定義了構造方法則再也不默認定義無參構造方法
默認調用無參構造:
package com.zhangyuwei.extend; public class test2 { public static void main(String[] args) { Car car=new Car(); Car car1=new Car(); } } class Car{ private int speed; public Car(){ System.out.println("安裝輪胎"); System.out.println("安裝方向盤"); this.speed=230; } }
結果:
帶參數的構造方法
1:構造方法的參數與普通方法相同
2:構造方法容許重載(同名方法不一樣參數個數或類型)
3:在建立子類時會默認調用父類的構造方法,通常是無參構造
4:使用super能夠調用父類指定的構造方法,子類中調用父類的構造方法時必須在第一行
5:使用super能夠調用父類中的任意公開成員
package com.zhangyuwei.extend; public class test3 { public static void main(String[] args) { Car2 car2=new Car2();//調用空構造 car2.show(); Car2 car21=new Car2(120);//調用有參構造 car21.show(); } } class Car2{ public int speed; public Car2(){this.speed=100;} public Car2(int speed){this.speed=speed;} public void show(){ System.out.println("車速爲:"+this.speed); } }
結果:
下面這個例子有些好玩。也正好驗證了上面一句話(在建立子類時會默認調用父類的構造方法,通常是無參構造)
package com.zhangyuwei.extend; public class test4 { public static void main(String[] args) { B b=new B(); } } class A{ public A(){ System.out.println("A"); } } class B extends A{ public B(){ System.out.println("B"); } }
結果: