一、object類
object:類層次結(jié)構(gòu)的根類,每個(gè)類都用object作為超類
object是不斷抽取而來的,具備著所以對(duì)象都具備的共性內(nèi)容
常用的共性功能
- equals(Object obj):指示其他某個(gè)對(duì)象是否與此對(duì)象對(duì)象"相等" 。Boolean型
那么如果我想比較對(duì)象的內(nèi)容(年齡)怎么辦!
這么辦!
- hashCode() :返回該對(duì)象的哈希碼值。
實(shí)際上,由Object類定義的hashCode方法會(huì)針對(duì)不同的對(duì)象返回不同的整數(shù)。(這一般是通過將該對(duì)象的內(nèi)部地址轉(zhuǎn)換成一個(gè)整數(shù)來實(shí)現(xiàn)的,但是Java編程語言不需要這種實(shí)現(xiàn)技巧)
- getClass():返回此Object的運(yùn)行時(shí)類
獲取的是當(dāng)前對(duì)象所屬的字節(jié)碼文件對(duì)象
- toString:返回該對(duì)象的字符串表示
如何簡(jiǎn)潔明了的看懂:
加一個(gè)方法把toString覆蓋了!
二、內(nèi)部類
內(nèi)部類:將一個(gè)類定義在另一個(gè)類的里面,對(duì)里面那個(gè)類就稱為內(nèi)部類(內(nèi)置類,嵌套類)。
class Outer { class Inner //內(nèi)部類 { } }
內(nèi)部類訪問的特點(diǎn)
- 內(nèi)部類可以直接訪問外部類中的成員
- 外部類要訪問內(nèi)部類,必須建立內(nèi)部類的對(duì)象
內(nèi)部類的應(yīng)用
一般用于類的設(shè)計(jì):
分析事物時(shí),發(fā)現(xiàn)該事物描述中還有事物,而且這個(gè)事物還在訪問被描述事物的內(nèi)容 這時(shí)就是還有的事物定義成內(nèi)部類來描述。
內(nèi)部類修飾符
內(nèi)部類相當(dāng)于定義在了外部類的成員位置上
那么如何直接訪問外部類中的內(nèi)部成員呢。
外部類.內(nèi)部類名 = 外部類對(duì)象.內(nèi)部對(duì)象
舉個(gè)栗子:
當(dāng)內(nèi)部類的修飾符是static靜態(tài)的,要怎么訪問呢?
當(dāng)內(nèi)部類的修飾符是static靜態(tài)的,就相當(dāng)于一個(gè)外部類。
當(dāng)內(nèi)部類是靜態(tài)的,成員是也是靜態(tài)的。
如果內(nèi)部類中定義了靜態(tài)的成員,這個(gè)內(nèi)部類也必須是靜態(tài)的
內(nèi)部類直接訪問外部類中成員
因?yàn)閮?nèi)部類持有了外部類的引用
外部類名.this
內(nèi)部類放到局部位置
三、匿名內(nèi)部類
匿名內(nèi)部類就是內(nèi)部類的簡(jiǎn)寫格式
前提:內(nèi)部類必須繼承或者實(shí)現(xiàn)一個(gè)外部類或許和接口匿名內(nèi)部類:其實(shí)就是一個(gè)匿名子類對(duì)象 格式:new 父類or接口(){子類內(nèi)容}
寫成匿名內(nèi)部類:
abstract class Demo
{
abstract void show();
}
class Outer2
{
int num = 3;
void method()
{
//new Inner().show(); //繼承內(nèi)部對(duì)象
//Demo是抽象類不可以創(chuàng)建對(duì)象,因?yàn)橛谐橄蠓椒? new Demo() //把抽象方法覆寫了就可以(抽象方法先封裝起來)
{
void show()
{
System.out.println("show........"+num);
}
}.show();
}
}
public class InnerClassDemo2
{
public static void main(String[] args)
{
new Outer2().method();
}
匿名內(nèi)部類的應(yīng)用
通常使用情況:
當(dāng)函數(shù)參數(shù)是接口類型時(shí),而且接口方法不超過三個(gè)。
可以用匿名內(nèi)部類作為實(shí)際參數(shù)進(jìn)行傳遞。
interface Inter
{
void show1();
void show2();
}
class Outer8
{
/* class Inner implements Inter
{
public void show1()
{
}
public void show2()
{
}
}*/
public void method()
{
/*Inner in = new Inner();
in.show1();
in.show2();*/
Inter in = new Inter()
{
public void show1()
{
}
public void show2()
{
}
};
in.show1();
in.show2();
}
}
public class InnerClassDemo4
{
public static void main(String[] args)
{
show(new Inter()
{
public void show1(){}
public void show2(){}
}
);
}
public static void show(Inter in)
{
in.show1();
in.show2();
}
}
(注釋起來的都是以前的方法)
四、this關(guān)鍵字
舉個(gè)栗子說明哈!開心不?又舉栗子了!
this的第一個(gè)用處!
this的第二個(gè)用處!
總結(jié)一下!
this的用處
- 當(dāng)成員變量和局部變量重名,可以用this區(qū)分
this:代表對(duì)象。簡(jiǎn)單說:哪個(gè)對(duì)象調(diào)用了this所在的函數(shù),this就代表哪個(gè)對(duì)象
- this也可以用于在構(gòu)造函數(shù)中調(diào)用其它構(gòu)造函數(shù)
注意:只能定義在構(gòu)造函數(shù)的第一行。因?yàn)槌跏蓟瘎?dòng)作要先執(zhí)行。
this關(guān)鍵字的應(yīng)用
只要在本來中用到了本類的對(duì)象,通常都用this。
判斷兩個(gè)人是否是同齡人
class Person5
{
private String name;
private int age;
Person5()
{
name = "baby";
age = 1;
System.out.println("person run");
}
Person5(String name)
{
this.name = name;
}
Person5(String name,int age)
{
this(name); //對(duì)this的調(diào)用必須是構(gòu)造函數(shù)中的第一個(gè)語句
this.age = age;
}//構(gòu)造函數(shù)和構(gòu)造函數(shù)之間的訪問;用this調(diào)用構(gòu)造函數(shù)
public void speak()
{
System.out.println(this.name+":"+this.age);
}
public boolean compare(Person5 p)
{
if(this.age==p.age)
return true;
else
return false;
}
}
public class ThisDemo
{
public static void main(String[] args)
{
Person5 p1 = new Person5("aa",30);
Person5 p2 = new Person5("zz",20);
p1.compare(p2);
}
}