Java入門學習-理解super,this,@override的用法
一、super和this
1、this
指向自己的引用。
我之前一般都在建構函式中用this
class parents{
int x,y;
public parents(int x,int y) {
this.x=x;
this.y=y;
}
}
用法:
this.x 指向當前的x欄位
this.method() 指向當前的method()方法
this() 指向當前構造方法
2、super
呼叫父類的構造欄位用super.x;
呼叫父類的構造方法用super();
呼叫父類方法用super.method();
//接上面程式碼,這時我想繼承parents
public class ThisSuper extends parents {
public ThisSuper() {
}
//這時ThisSuper會報錯:Implicit super constructor parents() is undefined. Must explicitly invoke another constructor
//如果我在Thissuper的構造方法裡,加上super(0,0);報錯就消失了,因為我用super()定義了父類的構造方法。
學習中遇到的細節:
1、我試著把super寫在main方法裡,提示:Cannot use super in a static context。所以super不能放在靜態區域裡。
2、同一個方法內只能呼叫一次this()或super()。否則會報錯:Constructor call must be the first statement in a constructor
其實extends時,就會呼叫super();
二、@override
override是重寫父類非私有的方法,返回型別和形參都不能改變。
然後是,不能重寫final方法(繼承的前提)
重寫方法不能丟擲新的檢查異常或者比被重寫方法申明更加寬泛的異常。
上面這句話我理解是,父類方法已定義好了範圍,子類重寫他就必須在他範圍內寫,所以,父類定義了異常,子類就不能丟擲更大的異常。
總而言之,重寫是具體做什麼時的重寫,然後範圍只能寫小不能寫大。
下面還是舉個栗子:
class parents {
public int add(int a,int b){
return (a+b);
}
}
public class ThisSuper extends parents {
@Override
public int add(int a,int b){
int c=a*10+b*10;
return c;
}
public static void main(String[] args) {
ThisSuper t=new ThisSuper();
parents p=new parents();
parents pt=new ThisSuper();
System.out.println("重寫後的方法:a*10+b*10="+t.add(3,4));
System.out.println("父類方法:a+b="+p.add(3,4));
System.out.println("父類型別但是用子類方法實現:add(3, 4)="+pt.add(3,4));
//輸出:
/*
重寫後的方法:a*10+b*10=70
父類方法:a+b=7
父類型別但是用子類方法實現:add(3,4)=70
*/
//第三條是因為父類也有這個方法,所以可以實現。
//如果父類沒有這個方法,使用parents pt=new ThisSuper();就會報錯The method te() is undefined for the type parents
}
}
實踐時,犯了個傻乎乎的錯誤:打算重寫父類建構函式。其實重寫是在繼承類後,方法之間的事情。然後建構函式是用來呼叫初始化的。前面也說了不用super,子類也會預設呼叫父類的建構函式。即無繼承何來重寫。
寫最後一個例子的時候,想起了咦,我繼承了怎麼沒有報錯。前面寫到
如果我在Thissuper的構造方法裡,加上super(0,0);報錯就消失了,因為我用super()定義了父類的構造方法。
再看一遍,想起來是因為父類是過載帶引數的構造方法,我繼承他。原因是系統會呼叫的是預設的無引數方法,但是因為我寫了有引數的構造方法,系統不會預設生成無引數構造方法,所以才報錯。
然後我除了用super(0,0);還可以在父類方法寫上了無引數的構造方法。
相關文章
- Java中super的用法Java
- Java 中 this 和 super 的用法詳解Java
- Egg入門學習(二)---理解service作用
- Java學習路線·入門Java
- 學習Java怎麼入門?Java
- Java 中 this 和 super 的用法概述及異同Java
- Java學習從入門到精通的學習建議Java
- 學習java怎麼入門?怎樣學Java?Java
- 【java】三大框架學習入門Java框架
- 成都Java學習入門建議Java
- Java語言入門:該如何學習JavaJava
- 【尚矽谷-Java學習】5.3 關鍵字 superJava
- Egg入門學習(三)---理解中介軟體作用
- Java工程師學習指南 入門篇Java工程師
- java入門基礎學習----泛型Java泛型
- Java工程師學習指南(入門篇)Java工程師
- Java新手入門學習路線圖Java
- java學習筆記1(入門級)Java筆記
- Java學習福利,入門到精通學習路線分享Java
- 深度學習入門必須理解這25個概念深度學習
- 機器學習入門筆記——如何理解梯度下降機器學習筆記梯度
- 21、super關鍵字的用法
- Java學習路線從入門到入土Java
- Java IO學習筆記八:Netty入門Java筆記Netty
- Java入門學習注意事項有哪些?Java
- Metasploit入門用法
- JAVA入門必學Java
- Java開發筆記(四十九)關鍵字super的用法Java筆記
- Java機器學習VisRec API快速入門 - foojayJava機器學習API
- Java 從入門到高階學習路線Java
- 新手學習Java,如何快速從入門到精通!Java
- OpenCV-Java版學習(2.影像入門)OpenCVJava
- Java開發學習(二)----IOC、DI入門案例Java
- ROS入門學習ROS
- nuxt 入門學習UX
- Nginx入門學習Nginx
- mybatis入門學習MyBatis
- Linux入門學習Linux
- GORM學習入門GoORM