1.包(package) 包(package) 用於管理程式中的類,主要用於解決類的同名問題。包也可以看成一個目錄。 包的作用 [1] 防止命名衝突。 [2] 允許類組成一個單元(模塊),便於管理和維護。 [3] 更好的保護類、屬性和方法 。 1.1 如何定義包 使用package進行定義,應放在源 ...
1.包(package)
包(package) 用於管理程式中的類,主要用於解決類的同名問題。包也可以看成一個目錄。
包的作用
[1] 防止命名衝突。
[2] 允許類組成一個單元(模塊),便於管理和維護。
[3] 更好的保護類、屬性和方法 。
1.1 如何定義包
使用package進行定義,應放在源文件有效代碼的第一句。// package 路徑
包的命名原則:始終保持類的全路徑唯一。
規範:
(1)包名由小寫字母組成,不能以圓點開頭或結尾。(圓點為包的分隔符)。
(2)包名之前最好加上唯一的首碼,通常使用組織倒置的網路功能變數名稱。如:package net.javagroup.xx
(3)包名後續部分依不同機構內部的規範不同而不同如:package net.javagroup.project1.projectname.xx
package test.newtest;
public class Test{
public static void main (String[] args){
System.out.println("Hellow");
}
}
當編譯帶包的源文件時寫法是:javac -d 目的地 源文件
編譯完成後Test位元組碼文件的路徑是 test.newtest.Test 。
1.2 如何導入包
使用import進行導入操作,告知該類需要的其他類在哪個路徑。
使用方法:(1)import test.newtest.Test // 導入test.newtest目錄下的Test類。
(2)import test.newtest.*// 導入test.newtest目錄下的所有類。
1.3 jvm提供的一些包
1.4 靜態導入
在JDK1.5以後,可以導入類中的靜態變數和方法。
使用方法:import static 路徑.路徑下的類名*; 例如:import static cn.sxt01.Calc.*;
2.繼承
為了提取兩個類中公共的代碼,可以使用繼承抽取重覆性的代碼到一個公共類中,這個公共的類稱為父類(super class)。繼承於父類的類稱為子類(sub class)。
2.1 訪問修飾符
java中存在4類訪問修飾符,分別是private、預設、protected、public。
(1)private:私有的,只能在本類可以訪問。
(2)friendly:預設的,同包可訪問,也稱包訪問許可權。
(3)protected:受保護的, ,類可訪問 ,同包可訪問 。
(4)public:公共的,都可以訪問。
2.2 java 繼承的特性
(1) 單根性。在java中,一個類只能有一個直接父類。
(2)傳遞性。C繼承於B,B繼承於A,C具有A的特性和行為。
類B繼承於類A,使用關鍵字extends,B擁有了A中非私有的屬性和方法。其中不能被繼承的父類成員有:
(1)父類中的private成員;
(2)子類與父類不在同一個包,使用了預設訪問許可權的成員;
(3)父類中的構造方法。
public class Person{
String name;
int age;
public void showInfo(){
System.out.println("姓名:"+name);
System.out.println(",年齡:"+age);
}
} //父類
public class Student extends Person{ } //子類,使用關鍵字extends進行定義
public class Test01{
public static void main(String[] args){
Student s = new Student();
s.name = "張三";
s.age = 20;
s.showInfo();
}
}//當需要使用多個類時,可以使用繼承,提取多個類中共有的部分,從而達到簡化代碼的效果。
2.3 super關鍵字
super關鍵字表示父類對象,只是一個關鍵字,無引用的效果。
super的作用:
(1)super訪問父類構造方法
public Dog(String name,int health,int love,String strain){
super(name,health,love);
this.setStrain(strain);
}
(2)super調用父類的非私有屬性(註意:私有的屬性不能用super訪問。)
public class Fruit{ float price; }
public class Apple extends Fruit{
public void showInfo(){
System.out.println("價格:"+super.price);
}
}
(3)super調用父類的非私有方法
public void print(){ super.showInfo(); System.out.println(",我是一隻"+this.getStrain()); }
(*當子類中沒有與父類同名的屬性時,直接使用屬性名或this.屬性名也可以訪問父類的非私有屬性,但是訪問速度相較於super.屬性名會比較慢,不推薦使用)
2.4 方法的重寫(overwrite/override)
當子類從父類繼承過來的方法不能滿足自身需要時,子類可以根據自身情況選擇部分重寫或者完全重寫。
方法重寫建立在繼承的基礎上,沒有繼承,就沒有重寫!
(1)部分重寫
public void showInfo(){
super.showInfo();
System.out.println("我是一隻"+this.getStrain()); //在從父類繼承過來的方法的基礎上添加新的需要。
}
(2)完全重寫
public void showInfo(){
System.out.println("--"+super.getName()+"--");
System.out.println("健康值:"+super.getHealth());
System.out.println("親密度:"+super.getLove());
System.out.println("品種:"+this.getStrain()); //對父類的方法進行完全重寫
}
重寫的規則
[1]方法名稱相同。
[2]參數列表相同。
[3]子類的訪問許可權一定 >= 父類訪問許可權。
[4]返回值和父類相同或者是其子類。