思維導圖
一胆绊、對象與類的概述
對象
含義:又來描述客觀事物一個實體,由一組屬性和方法構(gòu)成(具體的實體)
-
對象的特征:
1.屬性--對象具有的各種特征 2.行為--對象執(zhí)行的操作
-
使用對象的步驟
1. 創(chuàng)建對象(如:類名 對象名=new 類名(); DNF ace=new DNF();) 2. 引用對象成員:使用“.”進行操作 引用類的屬性: 對象名.屬性--ace.name="武神 " 引用類的方法:對象名.方法名()--ace.show();
類
- 含義:具有相同屬性和方法的一組對象的集合 (抽象的概念)
-----是對象的類型 - 類與對象的關(guān)系是:
類是對象的抽象---模板禽炬,對象是類的具體---實例。
-
定義類的步驟--
- 定義類名
- 編寫類的屬性
- 編寫類的方法
二、面向?qū)ο蟮奶匦?/h3>
封裝-----是把數(shù)據(jù)及處理數(shù)據(jù)的行為結(jié)合起來筑累,不被外界干擾濫用的程序設計機制
多態(tài)------是使用一個接口訪問一組行為的特性犁珠,執(zhí)行哪個行為由具體情況而定逻炊。
繼承------是指在一個現(xiàn)有類的基礎(chǔ)上去構(gòu)建一個新的類,構(gòu)建出來的新類被稱作子類(或派生類)犁享,現(xiàn)有類被稱作父類(或基類)余素,子類會自動擁有父類所有可承的屬性和方法。
三炊昆、類的成員
1. 成員變量
- 定義:成員變量或域變量----在類中定義的屬性數(shù)據(jù)
- 種類:
類的成員變量桨吊,即域變量。
形式參數(shù)列表中的變量凤巨,稱為參變量视乐。
方法內(nèi)部聲明的變量,稱為局部變量
-
成員變量和局部變量的區(qū)別
- A: 在類中的位置不同
- 成員變量:在類中方法外
- 局部變量: 在方法定義中或者方法聲明上
- B: 在內(nèi)存中的位置不同
- 成員變量:在堆內(nèi)存中
- 局部變量:在 棧內(nèi)存中
- C:生命周期不同
- 成員變量:隨著對象的創(chuàng)建而存在敢茁,隨著對象的消 失
- 局部變量:隨著方法的調(diào)用而存在佑淀,隨著方法的調(diào)用完畢而消失
- D: 初始化 值不同
- 成員變量:有默認初始化 值
- 局部變量:沒有買默認初始化值,必須定義彰檬,賦值 伸刃,然后才能使用谎砾。
注意事項:
局部變量名稱可以和成員變量名稱相同,在方法使用的時候捧颅,采用的是就原則
2. 成員方法
- 定義:
用來定義對類成員變量進行操作
- 種類:
- 構(gòu)造方法
- 當用戶定義了構(gòu)造方法時,程序不再產(chǎn)生默認的構(gòu)造方法.
- 構(gòu)造方法只在創(chuàng)建對象時調(diào)用
- 構(gòu)造方法的注意事項:
- A: 如果我們沒有給出構(gòu)造方法,系統(tǒng)自動提供一個無參數(shù)構(gòu)造方法
- B:如果我們給出構(gòu)造方法,系統(tǒng)將不會 給出默認的無參構(gòu)造方法
- 建議:定義了有參構(gòu)造時景图,也添加一個無參構(gòu)造方法
- 例如:
//定義一個學生類
public class Student{
private String name;
private int age;
//無參構(gòu)造
public Student(){
}
//有參構(gòu)造
public Student(String name){
//this關(guān)鍵字表示本對象
this.name = name
}
}
//調(diào)用
Student s1 = new Student();
Student s2 = new Student("張三");
- 普通方法
-
方法的重載
- 定義: Java中,同個類中有多個同名的方法碉哑,稱為重載
- 滿足重載的條件:
- 方法名相同
- 參數(shù)列表不同:參數(shù)個數(shù)挚币、參數(shù)類型、參數(shù)順序
- 形參名不同谭梗、返回值類型不同不影響方法的加載
注: 除了成員方法重載外忘晤,構(gòu)造方法也可以重載,定義了重載構(gòu)造方法的類可以用這些不同的構(gòu)造方法創(chuàng)建對象激捏。
- 方法重寫
- 定義:若子類中的方法與父類中的某一方法具有相同的方法名设塔、返回類型和參數(shù)表,則新方法將覆蓋原有的方法
public class Animal{
public void eat(){
System.out.print("吃東西T毒恕闰蛔!");
}
}
public class Dog extends Animal{
//子類重寫了父類的eat方法
@Override
public void eat(){
System.out.print("吃狗糧!图柏!");
}
}
3. 類成員初始化順序
四序六、內(nèi)部類
什么是內(nèi)部類呢?
- 內(nèi)部類( Inner Class )就是定義在另外一個類里面的類蚤吹。與之對應例诀,包含內(nèi)部類的類被稱為外部類。
作用:
內(nèi)部類提供了更好的封裝裁着,可以把內(nèi)部類隱藏在外部類之內(nèi)繁涂,不允許同一個包中的其他類訪問該類
內(nèi)部類的方法可以直接訪問外部類的所有數(shù)據(jù),包括私有的數(shù)據(jù)
內(nèi)部類所實現(xiàn)的功能使用外部類同樣可以實現(xiàn)二驰,只是有時使用內(nèi)部類更方便
種類: 成員內(nèi)部類扔罪,靜態(tài)內(nèi)部類,方法內(nèi)部類桶雀,匿名內(nèi)部類矿酵。
訪問修飾符:
- private:為了保護 數(shù)據(jù)
- static:為了容易訪問數(shù)據(jù)
一、成員內(nèi)部類:
- 可以使用任意訪問控制符修飾矗积,如 public 全肮、 protected 、 private 等
- 直接訪問 外部類中的私有屬性A:
- 注意:外部類不能訪問內(nèi)部類的成員變量和成員方法棘捣。
public class outer{
private String A="fds";
public int i=1;
public class inner{
String B="asf"
int i=2;
public void show(){
System.out.println(A);
System.out.println(B);
System.out.println(outer.this.i);//當外部類與內(nèi)部類成員變量相同時辜腺,訪問外部類成員的語句,外部類名.this.變量名
System.out.println(i);//訪問內(nèi)部類成員變量
}
}
}
public static void main(String [] ages){
//創(chuàng)建外部類的對象
outer o=new out();
//創(chuàng)建內(nèi)部類的對象;
inner i=o.new inner();//創(chuàng)建內(nèi)部類的語句:內(nèi)部類 對象名 = 外部類對象.new 內(nèi)部類( );
}
二哪自、方法內(nèi)部類
概念:
方法內(nèi)部類就是內(nèi)部類定義在外部類的方法中,方法內(nèi)部類只在該方法的內(nèi)部可見禁熏,即只在該方法內(nèi)可以使用壤巷。
注意:由于方法內(nèi)部類不能在外部類的方法以外的地方使用,因此方法內(nèi)部類不能使用訪問控制符和 static 修飾符
三瞧毙、靜態(tài)內(nèi)部類
特點:
靜態(tài)內(nèi)部類不能直接訪問外部類的非靜態(tài)成員胧华,但可以通過 new 外部類().成員 的方式訪問
如果外部類的靜態(tài)成員與內(nèi)部類的成員名稱相同,可通過“類名.靜態(tài)成員”訪問外部類的靜態(tài)成員宙彪;如果外部類的靜態(tài)成員與內(nèi)部類的成員名稱不相同矩动,則可通過“成員名”直接調(diào)用外部類的靜態(tài)成員
創(chuàng)建靜態(tài)內(nèi)部類的對象時,不需要外部類的對象释漆,可以直接創(chuàng)建 內(nèi)部類 對象名= new 內(nèi)部類();
sample1:
//外部類
public class HelloWorld {
// 外部類中的靜態(tài)變量score
private static int score = 84;
// 創(chuàng)建靜態(tài)內(nèi)部類
public static class SInner {
// 內(nèi)部類中的變量score
int score = 91;
public void show() {
System.out.println("訪問外部類中的score:" + HelloWorld.score );
//通過“類名.靜態(tài)成員”訪問外部類的靜態(tài)成員 System.out.println("訪問內(nèi)部類中的score:" + score);
}
}
// 測試靜態(tài)內(nèi)部類
public static void main(String[] args) {
// 直接創(chuàng)建內(nèi)部類的對象
SInner si=new SInner();
//創(chuàng)建靜態(tài)內(nèi)部類,可以直接創(chuàng)建 內(nèi)部類 對象名= new 內(nèi)部類();
// 調(diào)用show方法
si.show();
//不過為了更清晰知道這個靜態(tài)內(nèi)部類Sinner的位置悲没,一般創(chuàng)建靜態(tài)內(nèi)部類的格式為:外部類名.內(nèi)部類名 對象名 = new 外部類名.內(nèi)部類名();
HelloWorld.SInner si=new HelloWorld.SInner();
}
}
三、使用內(nèi)部類實現(xiàn)迭代器
public class Sequence {
private Object[] items;//對象數(shù)字組
private int next=0;//當前對象下標
public Sequence(int size){
items=new Object[size];
}
//添加
public void add(Object x){
if(next<items.length){
items[next++]=x;
}
}
private class SequenceSelector implements Selector{
private int i=0;
//判斷是否打印結(jié)束
@Override
public boolean end() {
// TODO Auto-generated method stub
return i==items.length;
}
//獲取當前對象
@Override
public Object current() {
// TODO Auto-generated method stub
return items[i];
}
//下一對象
@Override
public void next() {
if(i<items.length){
i++;
}
}
}
public Selector getSelector(){
return new SequenceSelector();
}
public interface Selector{
boolean end();//判斷是否結(jié)束
Object current();//獲取當前對象
void next();//獲取下一個對像
}
}
封裝-----是把數(shù)據(jù)及處理數(shù)據(jù)的行為結(jié)合起來筑累,不被外界干擾濫用的程序設計機制
多態(tài)------是使用一個接口訪問一組行為的特性犁珠,執(zhí)行哪個行為由具體情況而定逻炊。
繼承------是指在一個現(xiàn)有類的基礎(chǔ)上去構(gòu)建一個新的類,構(gòu)建出來的新類被稱作子類(或派生類)犁享,現(xiàn)有類被稱作父類(或基類)余素,子類會自動擁有父類所有可承的屬性和方法。
類的成員變量桨吊,即域變量。
形式參數(shù)列表中的變量凤巨,稱為參變量视乐。
方法內(nèi)部聲明的變量,稱為局部變量
成員變量和局部變量的區(qū)別
- A: 在類中的位置不同
- 成員變量:在類中方法外
- 局部變量: 在方法定義中或者方法聲明上
- B: 在內(nèi)存中的位置不同
- 成員變量:在堆內(nèi)存中
- 局部變量:在 棧內(nèi)存中
- C:生命周期不同
- 成員變量:隨著對象的創(chuàng)建而存在敢茁,隨著對象的消 失
- 局部變量:隨著方法的調(diào)用而存在佑淀,隨著方法的調(diào)用完畢而消失
- D: 初始化 值不同
- 成員變量:有默認初始化 值
- 局部變量:沒有買默認初始化值,必須定義彰檬,賦值 伸刃,然后才能使用谎砾。
注意事項:
局部變量名稱可以和成員變量名稱相同,在方法使用的時候捧颅,采用的是就原則
用來定義對類成員變量進行操作
- A: 如果我們沒有給出構(gòu)造方法,系統(tǒng)自動提供一個無參數(shù)構(gòu)造方法
- B:如果我們給出構(gòu)造方法,系統(tǒng)將不會 給出默認的無參構(gòu)造方法
//定義一個學生類
public class Student{
private String name;
private int age;
//無參構(gòu)造
public Student(){
}
//有參構(gòu)造
public Student(String name){
//this關(guān)鍵字表示本對象
this.name = name
}
}
//調(diào)用
Student s1 = new Student();
Student s2 = new Student("張三");
方法的重載
- 定義: Java中,同個類中有多個同名的方法碉哑,稱為重載
- 滿足重載的條件:
- 方法名相同
- 參數(shù)列表不同:參數(shù)個數(shù)挚币、參數(shù)類型、參數(shù)順序
- 形參名不同谭梗、返回值類型不同不影響方法的加載
注: 除了成員方法重載外忘晤,構(gòu)造方法也可以重載,定義了重載構(gòu)造方法的類可以用這些不同的構(gòu)造方法創(chuàng)建對象激捏。
- 定義:若子類中的方法與父類中的某一方法具有相同的方法名设塔、返回類型和參數(shù)表,則新方法將覆蓋原有的方法
public class Animal{
public void eat(){
System.out.print("吃東西T毒恕闰蛔!");
}
}
public class Dog extends Animal{
//子類重寫了父類的eat方法
@Override
public void eat(){
System.out.print("吃狗糧!图柏!");
}
}
什么是內(nèi)部類呢?
作用:
內(nèi)部類提供了更好的封裝裁着,可以把內(nèi)部類隱藏在外部類之內(nèi)繁涂,不允許同一個包中的其他類訪問該類
內(nèi)部類的方法可以直接訪問外部類的所有數(shù)據(jù),包括私有的數(shù)據(jù)
內(nèi)部類所實現(xiàn)的功能使用外部類同樣可以實現(xiàn)二驰,只是有時使用內(nèi)部類更方便
種類: 成員內(nèi)部類扔罪,靜態(tài)內(nèi)部類,方法內(nèi)部類桶雀,匿名內(nèi)部類矿酵。
訪問修飾符:
public class outer{
private String A="fds";
public int i=1;
public class inner{
String B="asf"
int i=2;
public void show(){
System.out.println(A);
System.out.println(B);
System.out.println(outer.this.i);//當外部類與內(nèi)部類成員變量相同時辜腺,訪問外部類成員的語句,外部類名.this.變量名
System.out.println(i);//訪問內(nèi)部類成員變量
}
}
}
public static void main(String [] ages){
//創(chuàng)建外部類的對象
outer o=new out();
//創(chuàng)建內(nèi)部類的對象;
inner i=o.new inner();//創(chuàng)建內(nèi)部類的語句:內(nèi)部類 對象名 = 外部類對象.new 內(nèi)部類( );
}
概念:
方法內(nèi)部類就是內(nèi)部類定義在外部類的方法中,方法內(nèi)部類只在該方法的內(nèi)部可見禁熏,即只在該方法內(nèi)可以使用壤巷。
注意:由于方法內(nèi)部類不能在外部類的方法以外的地方使用,因此方法內(nèi)部類不能使用訪問控制符和 static 修飾符
特點:
靜態(tài)內(nèi)部類不能直接訪問外部類的非靜態(tài)成員胧华,但可以通過 new 外部類().成員 的方式訪問
如果外部類的靜態(tài)成員與內(nèi)部類的成員名稱相同,可通過“類名.靜態(tài)成員”訪問外部類的靜態(tài)成員宙彪;如果外部類的靜態(tài)成員與內(nèi)部類的成員名稱不相同矩动,則可通過“成員名”直接調(diào)用外部類的靜態(tài)成員
創(chuàng)建靜態(tài)內(nèi)部類的對象時,不需要外部類的對象释漆,可以直接創(chuàng)建 內(nèi)部類 對象名= new 內(nèi)部類();
sample1:
//外部類
public class HelloWorld {
// 外部類中的靜態(tài)變量score
private static int score = 84;
// 創(chuàng)建靜態(tài)內(nèi)部類
public static class SInner {
// 內(nèi)部類中的變量score
int score = 91;
public void show() {
System.out.println("訪問外部類中的score:" + HelloWorld.score );
//通過“類名.靜態(tài)成員”訪問外部類的靜態(tài)成員 System.out.println("訪問內(nèi)部類中的score:" + score);
}
}
// 測試靜態(tài)內(nèi)部類
public static void main(String[] args) {
// 直接創(chuàng)建內(nèi)部類的對象
SInner si=new SInner();
//創(chuàng)建靜態(tài)內(nèi)部類,可以直接創(chuàng)建 內(nèi)部類 對象名= new 內(nèi)部類();
// 調(diào)用show方法
si.show();
//不過為了更清晰知道這個靜態(tài)內(nèi)部類Sinner的位置悲没,一般創(chuàng)建靜態(tài)內(nèi)部類的格式為:外部類名.內(nèi)部類名 對象名 = new 外部類名.內(nèi)部類名();
HelloWorld.SInner si=new HelloWorld.SInner();
}
}
public class Sequence {
private Object[] items;//對象數(shù)字組
private int next=0;//當前對象下標
public Sequence(int size){
items=new Object[size];
}
//添加
public void add(Object x){
if(next<items.length){
items[next++]=x;
}
}
private class SequenceSelector implements Selector{
private int i=0;
//判斷是否打印結(jié)束
@Override
public boolean end() {
// TODO Auto-generated method stub
return i==items.length;
}
//獲取當前對象
@Override
public Object current() {
// TODO Auto-generated method stub
return items[i];
}
//下一對象
@Override
public void next() {
if(i<items.length){
i++;
}
}
}
public Selector getSelector(){
return new SequenceSelector();
}
public interface Selector{
boolean end();//判斷是否結(jié)束
Object current();//獲取當前對象
void next();//獲取下一個對像
}
}