亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > Java > 正文

Java編程復用類代碼詳解

2024-07-13 10:17:17
字體:
來源:轉載
供稿:網友

本文研究的主要是Java編程中的復用類,那么到底復用類是什么東西,又有什么用法,下面具體介紹。

看了老羅羅升陽的專訪,情不自禁地佩服,很年輕,我之前以為和羅永浩一個級別的年齡,也是見過的不是初高中編程的一位大牛之一,專訪之后,發現老羅也是一步一個腳印的人。別說什么難做,做不了,你根本就沒去嘗試,也沒有去堅持。

If you can't fly then run,if you can't run then walk, if you can't walk then crawl,but
whatever you do,you have to keep moving forward——Martin Luther King.

復用類這標題剛開始很難懂,后面專門去看了書的英文原版,其實標題是reusing classes,重新使用類,其實復用就是“利用現成的東西”的意思,其實實現的兩種方法就是java/244018.html">javascript/297272.html">java/276795.html">java/222461.html">java中經常聽到的——組合和繼承。

(1)組合

has-a的作用。

public class TV {   Show show;   public String toString(){    return "showgirl";   } }  class Show{ } 

提一下toString方法,當你需要String而你是一個對象的時候,編譯器會調用對象的toString方法。

TV里有Show,現在的show沒有初始化,為null,不能調用show的方法。

組合的作用強大,以面向對象看,假如你在造一個Car類,那么你可以用組合輕易的將Glass,Light,Engine等等的Car這些部件組合起來。

(2)繼承

is-a

package com.myown.iaiti;public class Father {	public int i;	void get(){		System.out.println("father");	}}package son;import com.myown.iaiti.*;public class Son extends Father{	Father f = new Father();	int j = f.i;	Son son = new Son();	son.get();}public void get(){	super.get();	System.out.println("son");}}

這里有個包訪問權限的問題,假如沒有加public的時候,默認是包內成員訪問,不同包訪問,即Son中的Father成員訪問get方法是不可見的。而public的話是可見的,所以i訪問得到。

private部分是不能繼承,屬于父類私有,而public的部分,將繼承,需要修改的方法,可以進行重寫。要添加的屬性可以單獨添加。

而且繼承的方法,如果原本的father的public方法重寫之后沒將public加上,會有Cannot reduce the visibility of the inherited method from Father,也就是不能減少父類中繼承方法的可見性。super指的是父類,即Father。

還有一點是,其實java中所有的類都隱式地繼承了Object類。Object是父類,其他類是子類
老外喜歡講為基類。子類也叫導出類或者派生類。

(3)代理

設計模式里面有個比較難懂的——代理模式,作者講的很有趣,代理是組合和繼承的中庸之道。

package son; class Father{   public void get(){     System.out.println("father");   } } public class Son extends Father{   public static void main(String[] args) {     Father f = new Father();     f.get();   } }  class FatherProxy{   private Father f = new Father();   public void get(){     f.get();   } } 

像直接把Father當做成員,那么father的方法就暴露給這個類了,那我們可以使用FatherProxy這樣的代理類,我自己定義好get方法是怎么拿的,我自己知道是調用father的get方法,但是使用我這個代理的人不知道,我只告訴他你要用就用代理的get的方法就可以了。封裝性就體現出來了。上面只是隨便敲的一個簡單例子。

(4)重寫和重載

class Father{   public void get(String s){     System.out.println("father");   }      public void get(boolean b){     System.out.println("boolean");   } } public class Son extends Father{   @Override   public void get(String s){     System.out.println("father");   }      // @Override //會有錯誤提示 因為父類沒有該方法,不是重寫   public void get(int i ){     System.out.println("sonint");   }      public static void main(String[] args) {     Son s = new Son();     s.get("d");     s.get(false);     s.get(1);   } } 

重寫是重新覆蓋父類的方法,如果沒有重寫或者重載,那么子類調用一個子類沒有的方法時,其實是調用父類。

重載是同樣的方法名,但參數名稱不同,為了防止你錯誤的進行重載可以加上@Override標簽,那樣會提示你并沒有重寫方法。

(5)protected

Java編程訪問權限的控制代碼詳解

在前面一篇提前寫了,因為之前沒講繼承的東西。

可以簡單將protected看成父類給兒子繼承的遺產,其他非繼承類不能訪問。

(6)final關鍵字

加上final關鍵字的基本類型,表示這個變量初始化后不會改變。類似c的define,你希望一個變量在這個程序里就是這個值不需要改變。就可以用final。

public class Son{   int age = 2;   public static void main(String[] args) {          final int i = 1;     // i = 2; 值不能再改變     final Son son = new Son();     // son = new Son();     //The final local variable son cannot be assigned.      //It must be blank and not using a compound assignment     //final修飾的局部變量son不能被分配,必須為空或者不要再次分配          son.age = 4;     //雖然引用恒定不變,但是,對象本身卻可以改變。   }      void change(final int c){     // c= this.age; 無法賦予新值 因為值只有在方法傳參決定  對象引用和這個類似     //age ++;    無法改變   } } 

static本來是靜態初始化,和final一起用就是占據了一塊不能改變的存儲空間。

static final即編譯期常量,常量名按照c的常量命名傳統,全部用大寫字母,單詞之間用下劃線分開。

static final VALUE_ONE = 1; 

final修飾方法時

public class Print {   final void cannotprint(){     System.out.println(1);   } }  public class PrintSon extends Print{   //void cannotprint(){}   //無法重寫 因為被final修飾了      public static void main(String[] args) {     PrintSon ps = new PrintSon();     ps.cannotprint();   } } 

可以看成父類要求子類必須繼承的不可修改財產(祖傳)。private隱式地指定為final,因為private根本就不給你繼承。這比給你繼承但不能修改還更私有。

順便將權限理清。

  • public,公共財產,不止是子類,其他類也可以用。
  • final,祖傳珍寶,留給子類,但不允許修改。
  • private,父類私有財產,不會給子類繼承。
  • protected,父類專門留給子類的財產,其他人不能用它。

當final修飾的是類的時候,是為了讓這個類不會被繼承。

(7)繼承和初始化

這里的順序問題是一個很有趣的問題??蠢?。

class GrandFather{   private static int i = print();   private static int print(){     System.out.println("g");     return 1;   } } class Father extends GrandFather{   private static int i = print();   private static int print(){     System.out.println("f");     return 1;   } } public class Son extends Father{   private static int i = print();   private static int print(){     System.out.println("s");     return 1;   }   public static void main(String[] args) {     System.out.println("first");   } } 

打印的結果是first嗎?錯了。

雖然執行的是main方法,但是看到son這個需要靜態初始化的i沒有,結果是s,first嗎?

這還有初始化的問題,son是繼承father,那么編譯器會加載father,并初始化i,那father繼承grandfather,那么編譯器會去加載grandfather,類似遞歸。

那最后最先初始化的是grandfather的i。

所以最后的結果是:g,f,s,first。

總結

以上就是本文關于Java編程復用類代碼詳解的全部內容,希望對大家有所幫助。感興趣的朋友可以繼續參閱本站其他相關專題,如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲欧美一区二区三区情侣bbw| 97超碰蝌蚪网人人做人人爽| 欧美国产亚洲精品久久久8v| 国产成人精品av在线| 欧美日韩免费在线观看| 国产精品偷伦视频免费观看国产| 亚洲国产精品yw在线观看| 久久久精品国产一区二区| 久久久久久久久久亚洲| 亚洲社区在线观看| 国产+人+亚洲| 欧美激情在线狂野欧美精品| 亚洲春色另类小说| 久久久久免费精品国产| 国产欧美日韩最新| 久久久久久久久久久人体| 亚洲另类激情图| 国产精品美女在线观看| 岛国av在线不卡| 国产精品免费久久久久影院| 2019中文字幕在线免费观看| 久久久精品2019中文字幕神马| 亚洲高清一二三区| 欧美亚洲国产成人精品| 国产日本欧美一区二区三区在线| 91亚洲精品一区二区| 少妇av一区二区三区| 亚洲自拍偷拍在线| 日韩精品视频中文在线观看| 亚洲国产精品成人av| 最近2019免费中文字幕视频三| 宅男66日本亚洲欧美视频| 亚洲精品自拍第一页| 欧美大片免费观看在线观看网站推荐| 国产一区二中文字幕在线看| 亚洲精品久久久久久久久久久| 亚洲精品天天看| 日韩中文字幕在线视频| 亚洲欧洲黄色网| 国产精品久久婷婷六月丁香| 久久97久久97精品免视看| 日韩欧美在线第一页| 狠狠做深爱婷婷久久综合一区| 欧美日韩在线视频一区二区| 久久综合88中文色鬼| 日韩高清av一区二区三区| 国产精品免费看久久久香蕉| 亚洲精品短视频| 国产一区二区久久精品| 欧美另类在线播放| 久久精品亚洲94久久精品| 国产精品久久久久久久美男| 在线亚洲午夜片av大片| 日韩在线www| 欧美日韩国产va另类| 51视频国产精品一区二区| 国产精品国内视频| 97在线视频一区| 国产精品视频久久| 国产欧美va欧美va香蕉在| 欧美亚洲另类制服自拍| 亚洲va欧美va国产综合剧情| 亚洲最新视频在线| 亚洲欧美精品中文字幕在线| 另类少妇人与禽zozz0性伦| 97视频色精品| 中文字幕日韩欧美在线视频| 欧美午夜电影在线| 成人在线视频网| 日本精品va在线观看| 欧美日韩ab片| 亚洲香蕉成视频在线观看| 这里只有精品丝袜| 国产99久久精品一区二区| 国产精品丝袜久久久久久不卡| 成人黄色av播放免费| 国产精品视频在线观看| 欧美成人激情在线| 欧美午夜xxx| 久久香蕉国产线看观看网| 日韩在线视频二区| 亚洲精品国产精品国产自| 亚洲精品成人网| 97在线观看免费高清| 久久久亚洲精选| 欧美日韩性生活视频| 亚洲美女自拍视频| 亚洲一区二区三区四区在线播放| 亚洲精品久久久久久久久久久久久| 亚洲激情在线视频| 中文字幕在线成人| 777国产偷窥盗摄精品视频| 亚洲女人初尝黑人巨大| 国产视频一区在线| 国产精品嫩草影院一区二区| 日韩欧美高清视频| 欧美日韩一区二区免费视频| 在线观看日韩视频| 国产精品爽黄69天堂a| 久久亚洲精品小早川怜子66| 日韩av免费在线观看| 亚洲精品国产精品国自产在线| 色综合久久精品亚洲国产| 亚洲白虎美女被爆操| 国产欧美日韩中文字幕| 欧亚精品中文字幕| 91探花福利精品国产自产在线| 亚洲午夜未删减在线观看| 亚洲精品欧美日韩| 国产精品国产三级国产aⅴ浪潮| 日韩av不卡电影| 精品久久国产精品| 播播国产欧美激情| 亚洲国产精品久久久| 中文字幕在线看视频国产欧美| 日韩有码片在线观看| 91理论片午午论夜理片久久| 91精品国产综合久久久久久久久| 91wwwcom在线观看| 久久久精品一区二区三区| 亚洲欧美另类人妖| 国产精品扒开腿爽爽爽视频| 国产做受高潮69| 中文字幕久久久| 欧美性猛交xxxx富婆| 日韩a**中文字幕| xxx成人少妇69| 国产精品久久久久999| 久久亚洲精品网站| 国产精品 欧美在线| 久久综合久久八八| 26uuu亚洲伊人春色| 中日韩美女免费视频网址在线观看| 国产亚洲视频中文字幕视频| 日韩免费中文字幕| 亚洲国产精品久久精品怡红院| 久久免费少妇高潮久久精品99| 成人精品视频在线| 久久99国产精品自在自在app| 国产aⅴ夜夜欢一区二区三区| 精品二区三区线观看| 欧美另类第一页| 伊人久久久久久久久久久| 国产精品欧美风情| 欧美日韩国产限制| 最近日韩中文字幕中文| www国产精品com| 在线中文字幕日韩| 久久精品久久久久久国产 免费| 日韩资源在线观看| 欧美午夜片在线免费观看| 亚洲日韩中文字幕在线播放| 日韩大陆毛片av| 国产精品久久久久久久久久ktv| 国产99久久精品一区二区永久免费| 精品久久久久久久久国产字幕| 国产精品日韩电影| 亚洲美女喷白浆| 欧美成人免费全部观看天天性色| 国产精品久久99久久| 国产99久久精品一区二区 夜夜躁日日躁| 国产精品27p| 97色伦亚洲国产| 国产美女精彩久久|