1、Java中的封裝
面向對象的三大特性:封裝润歉、繼承模狭、多態(tài)
- 1、封裝:
將類的某些信息隱藏在類內部踩衩,不允許外部程序直接訪問嚼鹉,而是通過該類提供的方法來實現(xiàn)對隱藏信息的操作和訪問。 - 2驱富、好處:
只能通過規(guī)定的方法訪問數(shù)據(jù)
隱藏類的實例細節(jié)锚赤,方便修改和實現(xiàn) - 3、封裝的實現(xiàn)步驟
修改屬性的可見性--private
創(chuàng)建getter/setter方法--用于屬性的讀寫
在getter/setter方法中加入屬性控制語句--對屬性值的合法性進行判斷
public class Telphone {
private float screen;
float cpu;
float mem;
public float getScreen(){
return screen;
}
public void setScreen(float newScreen){
screen=newScreen;
}
public Telphone(){
System.out.println ("無參的構造方法執(zhí)行了褐鸥!");
}
public Telphone(float newScreen,float newCpu,float newMem){
screen=newScreen;
cpu=newCpu;
mem=newMem;
System.out.println ("有參的構造方法執(zhí)行了线脚!");
}
public static void main(String[] args){
Telphone phone =new Telphone();
Telphone phone2 =new Telphone(5.0f,1.4f,2.0f);
phone2.setScreen(6.0f);
System.out.println("screen:"+phone2.getScreen());
}
}
2、使用包管理Java中的類
- 包的作用:
管理Java文件
解決同名文件沖突 - 定義包:package包名
注:必須放在Java源程序的第一行
包名可以使用“.”號隔開 - 系統(tǒng)中的包:
java.(功能).(類)
java.lang.(類)包含Java語言基礎的類
java.util.(類)包含Java語言中各種工具類
java.io.(類)包含輸入叫榕、輸出相關功能的類 - 包的使用
1浑侥、可以通過import關鍵字,在某個文件使用其他文件中的類
import java.util.Arrays; 導入部分
import java.util.*; 導入所有
2晰绎、Java中寓落,包的命名規(guī)范是全小寫字母拼寫
3、Java中的訪問修飾符
訪問修飾符--可以修飾屬性和方法的訪問范圍
4荞下、this關鍵字
- 1伶选、this關鍵字代表當前對象
this.屬性 操作當前對象的屬性
this.方法 調用當前對象的方法 - 2史飞、封裝對象的屬性的時候,經常會使用this關鍵字
5考蕾、Java中的內部類
問:什么是內部類呢祸憋?
答:內部類( Inner Class )就是定義在另外一個類里面的類。與之對應肖卧,包含內部類的類被稱為外部類蚯窥。
問:那為什么要將一個類定義在另一個類里面呢?清清爽爽的獨立的一個類多好叭省@乖!
答:內部類的主要作用如下:
- 內部類提供了更好的封裝葵姥,可以把內部類隱藏在外部類之內荷鼠,不允許同一個包中的其他類訪問該類
- 內部類的方法可以直接訪問外部類的所有數(shù)據(jù),包括私有的數(shù)據(jù)
- 內部類所實現(xiàn)的功能使用外部類同樣可以實現(xiàn)榔幸,只是有時使用內部類更方便
問:內部類有幾種呢允乐?
答:內部類可分為以下幾種:
成員內部類
靜態(tài)內部類
方法內部類
匿名內部類
//外部類HelloWorld
public class HelloWorld {
// 內部類Inner,類Inner在類HelloWorld的內部
public class Inner {
// 內部類的方法
public void show() {
System.out.println("welcome to imooc!");
}
}
public static void main(String[] args) {
// 創(chuàng)建外部類對象
HelloWorld hello = new HelloWorld();
// 創(chuàng)建內部類對象
Inner i = hello.new Inner();
// 調用內部類對象的方法
i.show();
}
}
6削咆、java中的成員內部類
內部類中最常見的就是成員內部類牍疏,也稱為普通內部類。我們來看如下代碼:
從上面的代碼中我們可以看到拨齐,成員內部類的使用方法:
1鳞陨、 Inner 類定義在 Outer 類的內部,相當于 Outer 類的一個成員變量的位置瞻惋,Inner 類可以使用任意訪問控制符厦滤,如 public 、 protected 歼狼、 private 等
2掏导、 Inner 類中定義的 test() 方法可以直接訪問 Outer 類中的數(shù)據(jù),而不受訪問控制符的影響羽峰,如直接訪問 Outer 類中的私有屬性a
3碘菜、 定義了成員內部類后,必須使用外部類對象來創(chuàng)建內部類對象限寞,而不能直接去 new 一個內部類對象,即:內部類 對象名 = 外部類對象.new 內部類( );
4仰坦、 編譯上面的程序后履植,會發(fā)現(xiàn)產生了兩個 .class 文件
其中,第二個是外部類的 .class 文件悄晃,第一個是內部類的 .class 文件玫霎,即成員內部類的 .class 文件總是這樣:外部類名$內部類名.class
另外凿滤,友情提示哦:
1、 外部類是不能直接使用內部類的成員和方法滴
可先創(chuàng)建內部類的對象庶近,然后通過內部類的對象來訪問其成員變量和方法翁脆。
2、 如果外部類和內部類具有相同的成員變量或方法鼻种,內部類默認訪問自己的成員變量或方法反番,如果要訪問外部類的成員變量,可以使用 this 關鍵字叉钥。如:
//外部類HelloWorld
public class HelloWorld{
//外部類的私有屬性name
private String name = "imooc";
//外部類的成員屬性
int age = 20;
//成員內部類Inner
public class Inner {
String name = "愛慕課";
//內部類中的方法
public void show() {
System.out.println("外部類中的name:" + HelloWorld.this.name );
System.out.println("內部類中的name:" + name );
System.out.println("外部類中的age:" + age);
}
}
//測試成員內部類
public static void main(String[] args) {
//創(chuàng)建外部類的對象
HelloWorld o = new HelloWorld ();
//創(chuàng)建內部類的對象
Inner inn =o.new Inner() ;
//調用內部類對象的show方法
inn.show();
}
}
7罢缸、java中的靜態(tài)內部類
靜態(tài)內部類是 static 修飾的內部類,這種內部類的特點是:
1投队、 靜態(tài)內部類不能直接訪問外部類的非靜態(tài)成員枫疆,但可以通過** new 外部類().成員** 的方式訪問
2、 如果外部類的靜態(tài)成員與內部類的成員名稱相同敷鸦,可通過“類名.靜態(tài)成員”訪問外部類的靜態(tài)成員息楔;如果外部類的靜態(tài)成員與內部類的成員名稱不相同,則可通過“成員名”直接調用外部類的靜態(tài)成員
3扒披、 創(chuàng)建靜態(tài)內部類的對象時值依,不需要外部類的對象,可以直接創(chuàng)建 內部類 對象名= new 內部類();
//外部類
public class HelloWorld {
// 外部類中的靜態(tài)變量score
private static int score = 84;
// 創(chuàng)建靜態(tài)內部類
public static class SInner {
// 內部類中的變量score
int score = 91;
public void show() {
System.out.println("訪問外部類中的score:" + HelloWorld.score );
System.out.println("訪問內部類中的score:" + score);
}
}
// 測試靜態(tài)內部類
public static void main(String[] args) {
// 直接創(chuàng)建內部類的對象
SInner si=new SInner();
// 調用show方法
si.show();
}
}
8谎碍、java中的方法內部類
方法內部類就是內部類定義在外部類的方法中鳞滨,方法內部類只在該方法的內部可見,即只在該方法內可以使用蟆淀。
一定要注意哦:由于方法內部類不能在外部類的方法以外的地方使用拯啦,因此方法內部類不能使用訪問控制符和 static 修飾符。
//外部類
public class HelloWorld {
private String name = "愛慕課";
// 外部類中的show方法
public void show() {
// 定義方法內部類
class MInner {
int score = 83;
public int getScore() {
return score + 10;
}
}
// 創(chuàng)建方法內部類的對象
MInner mi=new MInner();
// 調用內部類的方法
int newScore=mi.getScore();
System.out.println("姓名:" + name + "\n加分后的成績:" + newScore);
}
// 測試方法內部類
public static void main(String[] args) {
// 創(chuàng)建外部類的對象
HelloWorld mo=new HelloWorld();
// 調用外部類的方法
mo.show();
}
}