#華為#催更的老鐵們久等了,五一期間小編出去耍了一下,玩得太入迷就忘了還有文章沒更新。畢竟離開線上,小編還有生活。
看到新聞華為被點名,不由讓我感慨只有核心的東西掌握在自己手中,才有絕對的話語權!不管是找工作還是搞點其它都有絕對的主動權。
應該很多人都看到過,一些例如幾天就學會JAVA的文章。我可以很負責地告訴大家,這些文章都是扯淡的。Java就算是老師手把手教你,他也不敢說幾天就學會!
So,還是老老實實的跟著小編的節奏來學習,來吸收。
咱們繼續接著上期內容往下寫。沒看過之前文章的小夥伴。
為了能跟上小編的節奏推薦看一下
JAVA零基礎,快速學習(1)JAVA零基礎,這樣學習才快(2)乾貨滿滿Java零基礎,這樣學才快(3)純乾貨
一、繼承
Java繼承的話套路和c++大體是一樣的。,當然如果有盆友不懂繼承機制以及為什麼要有繼承的話下篇出一篇詳細的內容
這期直接上示例代碼,讀者可以大致看看->然後在跟著代碼後面的解釋 ->再次精讀
//base.java
package inherit;
public class base
{
private int id;
protected int math;
protected int Chinese;
public base(int id) //有參構造器
{
this.id=id; //this 用來指向自身 這裡用來區分 形參的id與類的成員id
}
public int re_id()
{
return id;
}
public int total_points() //總分
{
return math+Chinese;
}
}
//boy.java
package inherit;
public class boy extends base //用關鍵字 extends 繼承
{
private int circuit;
public boy(int id) //構造函數
{
super( id); //用super調用父類的構造器 傳入參數
}
public int total_points()
{
int a=super.total_points(); //用surper調用父類的方法
return a+circuit;
}
public void set_cir(int g)
{
circuit=g;
}
public void set_math_ch(int ma,int ch)
{
math=ma;
Chinese=ch;
}
public void set_math_ch(int ma)
{
Chinese=60;
math=ma;
}
public static void main(String[] args)
{
boy b =new boy(1);
System.out.println(b.re_id()); //使用基類的方法
b.set_math_ch(75); //使用只有一個參數的重載函數
b.set_cir(80);
System.out.println(b.total_points());
}
}
1.首先java中是通過關鍵字extends實現繼承的。值得注意的的是在Java中實現的繼承機制同C++中的公有繼承一樣!並且java不可以多繼承!
2.構造機制和c++略有不同,在C++中如果父類的構造器是有參數的,那麼在子類中的構造器應該通過成員初始化列表的的語法來完成參數傳遞的工作。在Java中通過super這個關鍵字在子類構造器中顯示調用並傳入參數!
3.Java支持成員函數重載和子類重寫父類的函數。但是不支持直接像c++中那樣進行默認參數,不過還是有對策的,可以利用重載巧妙的實現默認參數,具體可以參考上面代碼中的set_math_ch函數!
4.this的用法同C++!不過有種很通用的技巧,用於方法內的局部變量與對象的數據域變量同名的情況!用this可以起到表示當前對象的數據域變量的作用。可以參考代碼中的 this.id=id;
5.super這個關鍵字用法可以總結如下
【1】調用父類的構造方法;
【2】調用父類的方法(子類覆蓋了父類的方法時);
【3】訪問父類的數據域(可以這樣用但沒有必要這樣用)
6.final關鍵字上一篇文章中提到過他相當於c++中的const 他還有另外的用法 就是 聲明類可以把類定義為不能繼承的,即最終類;或者用於修飾方法,該方法不能被子類重寫。
7.當然也支持父類指向子類 如 base b=new boy();
8.最後還有一點就是java中所有類都是Object的直接或者間接之類。如果一個類沒有顯示的申明他的父類是誰,那麼他的父類就是Object。
二、抽象類
1.抽象類除了不能實例化對象之外,類的其它功能依然存在,成員變量、成員方法和構造方法的訪問方式和普通類一樣。由於抽象類不能實例化對象,所以抽象類必須被繼承,才能被使用。
2.使用Abstract關鍵字來聲明這個類為抽象類,Abstract關鍵字同樣可以用來聲明抽象方法,抽象方法只包含一個方法名,而沒有方法體。抽象方法沒有定義,方法名後面直接跟一個分號,而不是花括號。
3.抽象類的意義,這裡只簡單的總結一下,等學習完Java類的全部語法在進行系統的總結。
在面向對象的編程中,主要思想之一就是用類來描述這個世界的任何事物。不過這個世界的事物是可以歸類的,比如貓、狗、大象。又比如我們鍵盤中的鍵 如space鍵 它既是空格鍵又是很多播放器的暫停鍵等等。我們可以按照歸類他有聯繫的事物抽象出來,寫成抽象類。抽象類並不指向特定的某個事務,他是抽象的,他代表著一類事物共有的特徵!
4.下面用一個實例代碼說明,比如某學校要收教材費,有高一到高三3個年級。教務辦發出通知讓各個年級匯總他們的教材費。那麼這個類就可以做如下抽象
/*抽象類*/
package abstraction;
public abstract class abstraction_jw
{
protected int ch;
protected int math;
protected int Eng;
protected int ch_ma_en_money()
{
return ch+math+Eng;
}
public abstract int all_money();
}
/*高一類*/
package abstraction;
public class one extends abstraction_jw
{
int history; //高一有歷史課
public one()
{
//高一書的定價
ch=50;
math=40;
Eng=70;
history=30;
}
@Override
public int all_money()
{
return ch_ma_en_money()+history;
}
}
/*高二類*/
package abstraction;
public class tow extends abstraction_jw
{
int physics; //高二有物理課
public tow()
{
//高二的書的定價
math=80;
ch=70;
Eng=60;
physics=100;
}
@Override
public int all_money()
{
// TODO Auto-generated method stub
return ch_ma_en_money()+physics;
}
}
/*入口*/
package abstraction;
public class jw_main
{
public static void main(String[] args)
{
abstraction_jw one_m=new one();
abstraction_jw tow_m=new tow();
System.out.println("高一:"+one_m.all_money());
System.out.println("高二:"+tow_m.all_money());
}
}
對於我寫的,我覺得我寫的是比較詳細的了。但是我相信還是有一部分人看得不太明白。對於要是看不懂,推薦看一下我前面幾篇文章。Java學習要有耐心,慢慢消化。
如果實在不明白,也沒關係開發這麼多年我也總結了一套學習Java的資料與面試題,私信我發給你,另外如果你在技術上面想提升自己的話,也可以關注我後面更新的內容。