Object類
Object類它是java中的根類,是所有類的父類,包括數組都實現了Object類中方法.
學習一個類
查幫助文檔
1.查看類的體系.2.查看當前這個類的聲明方式.3.查看關於這個類的文字描述信息4.查看這個類的構造方法.5.查看這個類的成員方法.
學習一個類中的方法時主要記憶
1.方法作用2.方法參數3.方法返回值
主要方法
*toString*
聲明
public String toString()
方法作用:對象字符化.
方法返回值:一個字符串.展示的效果 類名@十六進制數
在開發中重寫toString方法的目的:爲了得到對象的成員屬性展示.
hashCode
聲明
public int hashCode()
方法作用:對於同一個類的對象,它們的hashCode應該一致.
方法返回值:返回一個數.
*equals*
聲明
public booleanequals(Object obj)
作用:比較兩個對象是否"相等"
參數:要比較的對象
返回值:相等返回true 不等返回false
在開發,爲什麼重寫equals方法?
使用equals方法去比較兩個對象時,一般是比較對象的成員屬性是否相同。
相等:1.比較兩個對象的地址是否相等
2.比較兩個對象的成員屬性是否相等。
注意:當我們進行equals方法重定時,一般也將hashCode方法重寫。
關於equals筆試題
==是比較的地址 equals方法是比較內容?
==是比較地址沒問題,但是Object類中定義的equals方法它就是使用==實現的,也是比較地址。
只有我們重寫equals方法後,它纔是比較內容。
介紹
finalize
垃圾回收時執行的一個方法。
getClass
獲得對象的所在類的字節碼文件對象.
publicClass getClass()獲得字節碼對象
Class類中提供一個String getName()方法,得到Class對象的名字
clone
創建並返回一個對象的複本.
接口
什麼是接口?理解成一個特殊的抽象類,因爲接口中的方法全是抽象.
接口的聲明方式
interface接口名{
屬性 默認修飾符 public static final
方法 默認修飾符 public abstract
}
接口的本質是一組常量與方法聲明組合。
類的聲明方式
class類名{
成員屬性
成員方法
}
爲什麼使用接口?因爲java中的類只能單繼承,接口可以多實現。
接口中爲什麼可以有多實現?
interface A{
void show();
}
interface B{
void show();
}
class C implements A,B{
public void show(){
}
}
因爲接口中的方法都是抽象的,也就是隻是方法的聲明,而沒有具體的內容。
所以我們可以讓一個類實現多個接口。
接口的好處
接口是對外暴露的規則。
接口是程序的功能擴展。
接口的出現降低耦合性。
接口可以用來多實現。
接口與類之間實現格式(多實現)
class類名 implements接口名1,接口名2,..{
}
注意:接口與類之間存在的是實現關係,當一個類實現接口後,必須將接口中的方法重寫。
因爲接口中的方法都是抽象的。
當一個類實現接口時,也相當於將接口中的屬性繼承了。
類與類之間(單繼承)
class類名 extends父類名{
}
接口與接口之間(多繼承)
interface接口名 extends接口1,接口2,..{
}
接口思想
USB接口
電腦的內存槽
PCI
API application programe interface應用程序接口
接口有兩種概念
1.java中的interface 它是對外提供的標準.2.接口 廣義的接口 公共的標準.
面向接口的編程
接口也存在多態********
與父類引用指向子類對象相似.但是它換個名字接口回調.
接口也存在多態語法與我們之前講的父類引用指向子類對象語法一致.
在開發中能用接口就用接口而不要去用繼承.
實現與繼承什麼時候去用?
extends------>is
implements--->like
繼承關係描述的是基本的功能.
實現關係描述的是擴展的功能.
abstract class Person{
abstract void eat();
}
interface player{
void swimming();
}
interface smoke{
void smoking();
}
class Teacher extends Personimplements player,smoke{
void eat(){}
void swimming{}
void smoking(){}
}
class Student extends Personimplements player{
void eat(){}
void swimming{}
}
class Woker extends Personimplements smoke{
void eat(){}
void smoking(){}
}
老師行爲人:吃 玩 抽
學生:吃 玩
工人:吃 抽
我都具有的行爲 吃
而玩 抽這些是擴展的行爲
抽象類與接口都是在設計階段去應用的。
接口與抽象類的區別
1.抽象類是類,只能單繼承 接口可以多實現
2.抽象類是繼承 is關係它描述的是基本功能
接口是實現 like 它描述的是擴展功能
3.抽象類中可以存在非抽象的方法
接口中的方法必須全是抽象的。
抽象類中的方法全是非抽象,這樣的類有什麼用.
適配器 :當一個接口中的方法比較多時,我們去實現這些方法不太方便。
這時候java一般都會爲接口中的方法多於2個的這樣的接口提供適配器。
適配器是一個抽象類,這個類中是將接口內的所有方法進行了空的重寫.
目的是爲了方便的使用接口。
內部類
內部類在設計階段應用.
什麼叫內部類?
在一個類中又聲明一個類,這個類就叫內部類,包含內部類的類叫外嵌類
內部做什麼的?
class Person{
String name;
class大腦{
}
class心臟{
}
void eat(){
class A{
}
}
}
在設計階段,發現某個類它是屬於另外一個類的一部分,不能在外部單獨存在,
那麼這時候就可以將其聲明成內部類。
內部類可以存在的位置?
1.可以存在成員位置(應用比較多) 在設計階段比較多
2.可以存在局部位置(方法內) 實際操作中可能會用到.
內部類的訪問方式?
對於內部類來說,如果它聲明在成員位置上可以使用成員修飾符來修飾 private static
普通的訪問方式
內部類可以直接訪問外部類的成員,包括private
外部類要想訪問內部類的成員,必須創建內部類對象.
內部類聲明在成員位置上
以下訪問內部類的方式,都不建議使用.
在外部直接訪問內部類成員
內部類沒有使用修飾符沒有 static
外部類名.內部類名引用=new外部類().內部類();
引用.內部成員.
內部類使用 static修飾
外部類名.內部類名引用=new外部類.內部類();
引用.內部成員.
被static修飾的內部類只能訪問外部類的static成員
當內部類是使用static聲明的,內部類中的成員可以是static,也可以不是static
如果內部類中的成員是static那麼內部類必須是static聲明的。
建議的訪問方式(在成員位置上)
在外部類中可以創建方法去訪問內部類的成員.
因爲內部類在使用時一般都是private
內部類聲明在局部
也可以直接訪問外部類的成員.
如果訪問方法內的局部變量,這個變量必須是final修飾的。
爲什麼?
因爲局部變量它的生命週期很短,當方法執行完,局部變量就被清理掉
,但是對象還存在,這時就訪問不到這個變量。
聲明成final,這個屬性是常量,它存在於常量區,這個時候
它的生命週期比局部變量生命週期要長。內部類對象就可以訪問到。
內部類生成的.class文件效果
聲明在成員位置上 外部類名$內部類名.class文件
聲明在局部位置上 外部類名$編號內部類名.class文件.
如果要訪問的外部類的成員與內部類成員重名,這個時候需要使用外部類名.this來指定當前this
對象是外部類的對象,在去調用外部類的成員。
class Outer
{
intid=1; //外部類成員
classInner
{
intid=2;//內部類成員
publicvoid show(){
int id=3;//局部變量
System.out.println(id); //訪問最近當前方法中的id
System.out.println(this.id);//訪問Inner類中的id
System.out.println(Outer.this.id);//訪問Outer類中的id
}
}
}
匿名內部類
匿名內部類它本質上是內部類的一種簡化方式.
它的格式
new父類名|接口名([參數]){
重寫方法(){}
};
new ----->創建一個對象
父類名|接口名()----->當前匿名的類的父類或實現的接口是什麼
{}匿名內部類,在這裏面可以進行成員的聲明與重寫。
筆試題
class Demo13
{
public static void main(String[]args)
{
//創建一個匿名對象的引用
Object obj=newObject(){
public voidshow(){
System.out.println("show");
}
};
obj.show();//父類引用指向子類對象調用子類特有的方法?
new Object(){
public voidshow(){
System.out.println("show");
}
}.show(); //子類對象調用子類方法.
}
}
匿名內部類細節
如果父類沒有無參構造,那麼在使用匿名內部類時要注意進行傳參數.