1.接口
是一個比抽象類還抽像的類,使用interface關鍵詞定義。
裡面隻能定義抽象方法和常量;
不能new ,不能建立對象;
使用:
1.定義接口的實作類:
修飾符 calss 類名 implements 接口名{
實作接口中所有的方法;
}
2.建立實作類的對象;
3.通過實作類對象調用實作類方法;
2.多态
父類類型的變量隻想子類的對象;
格式:
父類名 對象名 =new 子類名(參數清單);
在重寫變量過着方法的情況:
1.如果重寫了方法,通過多态通路時,通路子類中的方法;
2.如果重寫了變量,通過多态通路變量時,通路父類的變量;
3.static 關鍵字
靜态的意思;
使用修飾這個類的,所有對象的共享資料的,它屬于類,不屬于某一個對象,隻有一個對象修改了這個資料,就會影響到其他對象的使用;
通路方式:
1.通過對象名來通路:
格式:對象名.靜态成員;
2.靜态的通路方式:
格式: 類名.靜态成員;
推薦使用第二種通路方式;
4.靜态代碼塊
格式:
static{
靜态代碼;
}
靜态代碼塊會在以任何方式第一次使用這個類時,被執行,而且是最先被執行,而且隻執行一次。
特點:
1.優先于構造方法被執行;
2.隻能被執行一次;
3.靜态代碼塊優先于靜态方法被執行;
應用場景:
通常用于初始化靜态變量,保證這些變量隻能被指派一次;
5.final 關鍵字
是最終的。不可修改的;
final 可以修飾類,方法,變量;
1.final修飾類:
格式:修飾符 final class 類名{。。。};
特點:被final修飾的類是不能被繼承的。
2.final修飾變量:
格式:修飾符 final 傳回值類型 方法名(參數清單){
方法體;
renturn 傳回值;
}
特點:被final修飾的方法是不能被重寫的;
3.final修飾變量:
格式: 修飾符 final 資料類型 變量名=初始值;
特點: 被final修飾的變量的值不能被改變,其實就是常量;
6.包
是用來存儲class檔案的檔案夾,可以使用這些檔案夾管理你的程式檔案;
在項目中如何分包:
先建立一個最頂層的包:
公司域名的反寫.項目英文名稱的縮寫;
例如: cn.itcast.oa;
1.按照功能子產品的名稱分包:
按照功能子產品名稱建立不同的包:
cn.itcast.oa.user
cn.itcast.oa.email
cn.itcast.oa.permission
...
2.按照程式檔案的類型分包:
cn.itcast.oa.web
cn.itcast.oa.service
cn.itcast.oa.service.impl
cn.itcast.oa.dao
cn.itcast.oa.dao.impl
cn.itcast.oa.utils
...
推薦使用第二種方式分包;
導包:
關鍵字import.
當使用到的類與目前類不在同一個包下,而且不在java.lang.
7.通路權限修飾符
用來限制類,方法,變量的通路範圍的。
public(公共的,共用的)-protected(受保護的)-default(預設的)-private(私有的)
從左到右權限依次變小;
1.被public修飾的類,方法,變量,在任何類中都可以通路;
2.被private修飾的變量和方法隻能在本類中通路;
8.内部類
如果B類是定義在A類的裡面,就把B類叫做内部類;
分類:
成員内部類;
局部内部類;
class A{
public String name;
// 寫在了成員的位置
// 成員内部類
class B{
B類自己的代碼;
}
public void method01(){
....
}
public void method02(){
....
int a = 100;
int b = 200;
// 局部内部類
class C{
C類自己的代碼;
}
}
}
9.成員内部類
格式:
class 外部類{
成員變量;
//寫在了成員的位置
//成團内部類;
class 内部類{
内部類自己的代碼;
}
成員方法;
}
使用内部類的格式:
外部類.内部類 内部類對象=new 外部類().new 内部類();
内部類對象.内部類的成員;
在外部類中是把内部類作為一個成員來使用的。
例如:
Outer.Inner inner=new Outer().new Inner();
10.局部内部類
格式:
class 外部類{
成員變量;
public void method(){
内部類自己的代碼;
}
}
}
由于局部内部類是定義在方法裡面的,是以它的使用範圍僅限于這個方法内部;
11.匿名 内部類對象
建立了一個内部類的對象,沒又給它取名字,那麼這個對象就叫匿名内部類對象;
格式:
public class Fu{
....
}
public class test{
...
public void method(){
//通過父類的構造方法建立子類對象,然後指派給父類類型的變量:多态;
Fu f=new Fu(){
//重寫父類中的方法
};
}
}
示例代碼:
package pack15_innerclassobject;
public class InnerObjectDemo {
public static void main(String[] args) {
// 多态
Fu f = new Zi();
f.method01();
// 匿名内部類對象
// 匿名内部類對象調用結束後,會被垃圾回收期立即回收,釋放它占用的記憶體空間
// 這樣可以節省記憶體空間
new Fu(){
// 重寫父類中的方法method01
@Override
public void method01() {
System.out.println("--Zi-----method01------------");
}
}.method01();
// 建立一個匿名内内部類對象,然後給它取個名字叫f2
Fu f2 =new Fu(){
// 重寫父類中的方法method01
@Override
public void method01() {
System.out.println("--Zi-----method01------------");
}
};
f2.method01();
System.out.println(f2.a);
// 相當于下面的一行代碼;
// new Zi().method01();
System.out.println("====程式還沒有結束===========");
}
}
匿名内部類對象的使用場景:
在整個項目中隻有一個地方使用這個對象時,才把這個對象定義為匿名内部類對象。
12.練習題
1.類名座位方法參數類型或者傳回值類型
/*
* 定義方法時,如果參數的類型為類名類型的;
* 當調用方法時,需要給方法傳遞這個類的對象;
*/
public static void setPerson(Person p){
p.age = 30;
p.name="冬冬";
System.out.println(p.age);
System.out.println(p.name);
}
/*
* 定義方法時,如果方法的傳回值類型為類名類型的;
* 當給這方法傳回資料時,必須傳回這個類的對象;
*/
public static Person getPerson(){
Person p = new Person();
p.age = 25;
p.name="蓉蓉";
return p;
}
2.抽象類類名作為方法參數類型或者傳回值類型
3.接口名作為方法參數類型或者傳回值類型
USB usb = new Mouse();
public void useUSB(USB usb){
usb.open();
}
public USB getUSB(){
// USB usb = new Mouse();
Mouse m = new Mouse();
return m;
}