1、繼承this
一、繼承的概念spa
繼承機制是面向對向程序設計不可缺乏的關鍵概念,是實現軟件可重用的根基,是提升軟件系統的可擴張性與可維護性的主要途徑。(它容許建立分等級層次的類)。設計
繼承是指一個類的定義能夠基於另外一個已經存在的類,即子類基於父類,從而實現父類代碼的重用,子類能吸取已有類的數據屬性和行爲,並能擴張的能力。對象
二、繼承形式繼承
【訪問權限修飾符】【修飾符】子類名 extends 父類名 {子類體} 以下:get
public class Father {it
public void draw(){編譯
}程序設計
}class
public class Son extends Father{
public double getDiameter(){
return 0.0;
}
}
三、繼承的做用:代碼的複用
public class Father {--------------父類
public void draw(){
}
}
public class Son extends Father{------------------子類
public double getDiameter(){
return 0.0;
}
}
//演示代碼:子類對象能夠直接調用父類的方法,強調複用性
Son s = new Son();
son.draw();
四、繼承的特性
子類擁有父類非private的屬性,方法;
子類能夠擁有本身的屬性和方法,即子類能夠對父類進行擴展
子類能夠用本身的方式實現父類的方法
extends的繼承是單繼承的,就是一個子類只能繼承一個父類
2、構造方法與繼承
一、繼承中構造方法的調用
子類構造方法老是先調用父類的構造方法
默認狀況下,調用父類無參構造方法
可在子類構造方法的第一行,使用super關鍵字調用父類任意一個構造方法
二、子類調用父類構造方法的緣由
Java 語言中,要求子類有責任保證它所繼承的父類儘快進入到一個穩定、完整的狀態中。若是沒有這個約束,那麼子類的某個繼承自父類的方法可能會使用到父類中的一些變量,而這些變量並無進行初始化,從而產生一些難以預料的後果。
三、子類構造方法的執行詳解
必須將調用父類構造方法的這條語句放在子類構造方法的第一條語句位置。若是第一條語句沒有調用父類的構造方法,系統將會自動地在這個位置上插入一條調用父類默認構造方法的語句,即super();
因爲默認的構造方法不帶參數,因此,若是在父類中定義了帶參數的構造方法,而沒有定義不帶參數的構造方法將會出現編譯錯誤。這也正是建議你們在定義帶參數的構造方法時,必定要定義一個不帶參數的構造方法的緣由所在;
父類中那些帶參數的構造方法,子類將不會自動地調用它們,必須人工地將調用它們的語句寫入子類的構造方法中。
四、繼承中累的屬性
在子類中,若沒定義屬性則繼承父類屬性;若定義屬性沒賦值則被重寫爲默認值0.
3、this 關鍵詞
一、this關鍵字的用途
this關鍵字表明自身,在程序中主要的用途:
使用this關鍵字在自身構造方法內部引用其餘構造方法;
使用this關鍵字表明自身類的對象;
a.直接使用this
b.使用this關鍵字引用成員變量
c.使用this關鍵字引用成員方法
注意:this關鍵字必須放在非靜態方法裏面
二、this引用成員變量
在一個類的方法或構造方法內部,可使用「this. 成員變量名「這樣的格式來引用成員變量名,經常用來區分同名的成員變量和局部變量。
public class Company{
private int a;
public Company (int a){
this.a = a;
}
public int getA(){
return a;
}
public void setA(int a){
this.a = a;
}
三、this引用構造方法
在一個類的構造方法內部,也可使用this關鍵字引用其餘的構造方法,這樣能夠下降代碼的重複,也能夠是全部的構造方法保持統一,這樣方便之後的代碼修改和維護,也方便代碼的閱讀.
public class Company{
int a;
public Company(){
this(0);
}
public Company(int a){
this.a = a;
}
}
四、this引用成員方法
在一個類的內部,成員方法之間的互相調用是也可使用"this . 方法名(參數)"來進行引用.
public class Company{
Company instance;
public void sell(){
System.out.println("sellSoft");
}
public void doSell(){
this.sell();
}
}
五、this表明自身對象
在一個類的內部,也可使用this表明自身類的對象,或者換句話說,每一個類內不都有一個隱含的成員變量,該成員變量的類型的該類的類型,該成員變量的名稱是this
pubilc class Company{
Company instance;
public Company(){
instance = this ;
}
public void test(){
System.out.println(this);
}
}
4、super關鍵字
一、super關鍵字表明父類的引用,在程序中主要的用途
在子類構造方法中要調用父類的構造方法,須要注意:super語句只能出如今子類構造方法體的第一行;
當子類方法體中的局部變量或者子類的成員變量與父類成員變量同名時,即子類局部變量覆蓋父類成員變量時,用「super.成員變量名」來引用父類成員變量;
當子類的成員方法覆蓋了父類的成員方法時,也就是子類和父類有徹底相同的方法定義(方法體能夠不一樣),此時,用「super.方法名(參數列表)」的方式訪問父類的方法;
與this的區別,this一般指代當前對象,super一般指代父類。
二、子類構造方法中要調用父類構造方法
在子類構造方法中要調用父類的構造方法,須要注意:super語句只能出如今子類構造方法體的第一行
class Base {
Base() {
System.out.println("Base");
}
}
public class Checket extends Base {
Checket() {
super(); / /調用父類的構造方法,必定要放在方法的首個語句
System.out.println("Checket");
}
public static void main(String argv[]) {
. Checket c = new Checket();
}
}
三、super調用父類成員變量或方法
子類中的成員變量或方法與父類中的成員變量或方法同名。由於子類中的成員變量或方法名優先級高,因此子類中的同名成員變量或方法就隱藏了父類的成員變量或方法,可是咱們若是想要使用父類中的這個成員變量或方法,就須要用到super。
class Country {
String name;
void value() {
name = "China";
}
}
class City extends Country {
String name;
void value() {
name = "Dalian";
super.value(); //不調用此方法時,super.name返回的是父類的成員變量的值null
System.out.println(name);
System.out.println(super.name);
}
public static void main(String[] args) {
City c=new City();
c.value();
}.
}
四、this和super
this一般指代當前對象,super一般指代父類對象。
5、方法覆蓋(重寫)
一、方法覆蓋的定義
子類能夠重寫父類中某一方法,稱爲方法覆蓋,也稱方法重寫,是繼承中很是重要的知識點。若是子類須要修改從父類繼承到的方法體,就可使用方法覆蓋。
二、方法覆蓋的原則
同名、同參、同返回值、訪問權限不能縮小。
重載再總結:同方法名、參數類型不一樣(數量,順序,類型)、與返回值無關。