包java
包(package) 用於管理程序中的類,主要用於解決類的同名問題。包能夠看出目錄。編程
包的做用網絡
[1] 防止命名衝突。dom
[2] 容許類組成一個單元(模塊),便於管理和維護jvm
[3] 更好的保護類、屬性和方法 ide
包命名規範工具
包命名原則:始終保持類的全路徑惟一。ui
規範:this
[1]包名由小寫字母組成,不能以圓點開頭或結尾。圓的有特殊意義——包分隔符spa
[2]包名以前最好加上惟一的前綴,一般使用組織倒置的網絡域名。如:域名javagroup.net
package net.javagroup.xx
[3]包名後續部分依不一樣機構內部的規範不一樣而不一樣
package net.javagroup.project1.projectname.xx
導包
import 用於導包,告訴類須要的其餘類在什麼位置!
包名 |
描述 |
java.lang/語言包 |
系統默認導入,String類保存在這個包中,因此咱們在使用String時不須要導包 |
java.util |
工具包,一些經常使用的類庫,Scanner,Date,Arrays |
java.io |
輸入輸出處理,文件的讀寫等 |
java.net |
網絡編程 |
java.math |
數學計算.Math.random |
java.awt(C) |
這個包中的類用於構建和管理應用程序的圖形用戶界面 |
若是一個類中定義的屬性和方法都是靜態時,能夠考慮使用靜態導入。jdk1.5+ 出現。
package cn.sxt01; public class Calc{ public static float PI = 3.14f;
public static int add(int a,int b){ return a+b; } } |
package cn.sxt02;
// import cn.sxt01.Calc; // 靜態導入 import static cn.sxt01.Calc.*; public class Test01{ public static void main(String[] args){ System.out.println(PI); System.out.println(add(1,2)); } } |
思考:若是一個類中還有實例成員,能不能用靜態導入?
|
爲了提取兩個類中公共的代碼,能夠使用繼承抽取重複性的代碼到一個公共類中,這個公共的類稱爲父類(super class)。繼承於父類的類稱爲子類(sub class).
java繼承的特性
[1] 單根性。在java中,一個類只能有一個直接父類。
[2] 傳遞性。C繼承於B,B繼承於A,C具備A的特性和行爲。
類B繼承於類A,使用關鍵字extends,B擁有了A中非私有的屬性和方法。
public class Person{ String name; int age;
public void showInfo(){ System.out.println("姓名:"+name); System.out.println(",年齡:"+age); } } |
public class Student extends Person{
} |
public class Test01{ public static void main(String[] args){ Student s = new Student(); s.name = "張三"; s.age = 20; s.showInfo(); } } |
若是Person中定義了private 屬性count
|
super關鍵字表示父類對象,只是一個關鍵字,裏面沒有引用。
[1]super訪問父類構造方法
public Dog(String name,int health,int love,String strain){ /* this.setName(name); this.setHealth(health); this.setLove(love); */ super(name,health,love); this.setStrain(strain);
} |
super調用父類構造方法時,必須寫到構造方法有效代碼第一句
|
[2] super調用父類的非私有屬性
super能夠訪問父類的非私有屬性。私有的屬性不能用super訪問。
public class Fruit{ float price; } |
public class Apple extends Fruit{
public void showInfo(){ // 不推薦使用 //System.out.println("價格:"+price); //System.out.println("價格:"+this.price); // 當須要訪問父類的屬性時,優先使用super System.out.println("價格:"+super.price); }
} |
變量隱藏(C)
當子類定義了一個和父類同名的屬性時,在子類中優先訪問子類的屬性,若是要訪問父類屬性必定要加super。
public class Fruit{ float price;
private String color;
int weight = 100; } |
public class Apple extends Fruit{
int weight = 200;
public void showInfo(){ // 不推薦使用 //System.out.println("價格:"+price); //System.out.println("價格:"+this.price); // [1]當須要訪問父類的屬性時,優先使用super System.out.println("價格:"+super.price);
// [2]不能訪問父類的私有屬性 // System.out.println("顏色:"+super.color);
// [3] 訪問和父類同名的變量weight System.out.println("重量:"+weight); System.out.println("重量:"+this.weight); System.out.println("重量:"+super.weight); }
} |
一句話:若是要訪問父類屬性,經過super;若是要訪問子類屬性,經過this.
|
java中存在4類訪問修飾符,分別是private、默認、protected、public。
修飾符 |
本類✘ |
同包子類 |
同包其餘類 |
不一樣包子類 |
不一樣包其餘類 |
private |
✔ |
✘ |
✘ |
✘ |
✘ |
默認 |
✔ |
✔ |
✔ |
✘ |
✘ |
protected |
✔ |
✔ |
✔ |
✔ |
✘ |
public |
✔ |
✔ |
✔ |
✔ |
✔ |
private:私有的,只能在本類能夠訪問。
friendly:默認的,同包可訪問,也稱包訪問權限。
protected:受保護的, ①子類可訪問 ②同包可訪問
public:公共的,均可以訪問
|
繼承關係內存圖
|
當子類從父類繼承過來的方法不能知足自身須要時,子類能夠根據自身狀況進行方法重寫(overwrite/override)
方法重寫創建在繼承的基礎上,沒有繼承,就沒有重寫!
子類根據自身狀況,能夠選擇部分重寫和徹底重寫。
部分重寫
public void showInfo(){ super.showInfo(); System.out.println("我是一隻"+this.getStrain()); } |
徹底重寫
重寫的規則
[1]方法名稱相同
[2]參數列表相同
[3]子類的訪問權限必定 >= 父類訪問權限
[4]返回值和父類相同或者是其子類