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;
}