国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務(wù)器之家:專(zhuān)注于服務(wù)器技術(shù)及軟件下載分享
分類(lèi)導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語(yǔ)言|JavaScript|易語(yǔ)言|vb.net|

服務(wù)器之家 - 編程語(yǔ)言 - Java教程 - 淺談java 面對(duì)對(duì)象(抽象 繼承 接口 多態(tài))

淺談java 面對(duì)對(duì)象(抽象 繼承 接口 多態(tài))

2020-08-16 14:41Java之家 Java教程

下面小編就為大家?guī)?lái)一篇淺談java 面對(duì)對(duì)象(抽象 繼承 接口 多態(tài))。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

什么是繼承?

多個(gè)類(lèi)中存在相同屬性和行為時(shí),將這些內(nèi)容抽取到單獨(dú)一個(gè)類(lèi)中,那么多個(gè)類(lèi)無(wú)需再定義這些屬性和行為,只要繼承那個(gè)類(lèi)即可。

多個(gè)類(lèi)可以稱(chēng)為子類(lèi),單獨(dú)這個(gè)類(lèi)稱(chēng)為父類(lèi)、超類(lèi)或者基類(lèi)。

子類(lèi)可以直接訪(fǎng)問(wèn)父類(lèi)中的非私有的屬性和行為。

通過(guò) extends 關(guān)鍵字讓類(lèi)與類(lèi)之間產(chǎn)生繼承關(guān)系。

class SubDemo extends Demo{} //SubDemo是子類(lèi),Demo是父類(lèi)

繼承有什么好處?

•提高代碼的復(fù)用性。

•讓類(lèi)與類(lèi)之間產(chǎn)生了關(guān)系,是多態(tài)的前提。

繼承的特點(diǎn)

1、Java只支持單繼承,不支持多繼承。

?
1
2
3
//一個(gè)類(lèi)只能有一個(gè)父類(lèi),不可以有多個(gè)父類(lèi)。
class SubDemo extends Demo{} //ok
class SubDemo extends Demo1,Demo2...//error

 

2.Java支持多層(重)繼承(繼承體系)。

?
1
2
3
class A{}
class B extends A{}
class C extends B{}

使用繼承時(shí)的注意事項(xiàng)

•如果類(lèi)之間存在著:is a 的關(guān)系,就可以考慮使用繼承。

•不要為了繼承部分功能,而去使用繼承。

super和this有什么區(qū)別?

super是一個(gè)關(guān)鍵字,代表父類(lèi)的存儲(chǔ)空間標(biāo)識(shí)。(可以理解為父親的引用)

super和this的用法相似。

this代表對(duì)象的引用(誰(shuí)調(diào)用就代表誰(shuí));
super代表當(dāng)前子類(lèi)對(duì)父類(lèi)的引用。

使用場(chǎng)景

•當(dāng)子父類(lèi)出現(xiàn)同名成員時(shí),可以用super進(jìn)行區(qū)分;
•子類(lèi)要調(diào)用父類(lèi)構(gòu)造函數(shù)時(shí),可以使用super語(yǔ)句。

區(qū)別

1.成員變量

this.變量    --    本類(lèi)的
super.變量    --    父類(lèi)的

2.構(gòu)造方法

this(...)    --    本類(lèi)的
super(...)    --    父類(lèi)的

3.成員方法

this.方法名()    --    本類(lèi)的   
super.方法名()    --    父類(lèi)的

super();和this();都是在構(gòu)造函數(shù)的第一行,不能同時(shí)出現(xiàn)。

方法的重寫(xiě)(覆蓋)

子類(lèi)中出現(xiàn)與父類(lèi)一模一樣的方法時(shí)(除了權(quán)限修飾符,權(quán)限修飾符大于等于不包括private,返回值類(lèi)型,方法名和參數(shù)列表相同),會(huì)出現(xiàn)覆蓋操作,也稱(chēng)為重寫(xiě)或者復(fù)寫(xiě)。

父類(lèi)私有方法,子類(lèi)看不到,因此父類(lèi)私有方法的重寫(xiě)也就無(wú)從談起。

覆蓋注意事項(xiàng):

•覆蓋時(shí),子類(lèi)方法權(quán)限一定要大于等于父類(lèi)方法權(quán)限;

•靜態(tài)只能覆蓋靜態(tài)。

覆蓋的使用場(chǎng)景:

當(dāng)子類(lèi)需要父類(lèi)的功能,而功能主體子類(lèi)有自己特有內(nèi)容時(shí),可以復(fù)寫(xiě)父類(lèi)中的方法,這樣,既沿襲了父類(lèi)的功能,又定義了子類(lèi)特有的內(nèi)容。

方法重寫(xiě)和重載有什么區(qū)別?

方法的重寫(xiě)用在子類(lèi)方法與父類(lèi)方法一模一樣時(shí),除權(quán)限修飾符,返回值類(lèi)型,方法名和參數(shù)列表都是相同的。

重載用在同一個(gè)類(lèi)中各方法方法名相同,參數(shù)列表不同(與返回值類(lèi)型沒(méi)有關(guān)系)的情況。

子父類(lèi)中構(gòu)造方法的用法:

1.子類(lèi)的初始化過(guò)程中,首先回去執(zhí)行父類(lèi)的初始化動(dòng)作。因?yàn)樽宇?lèi)的構(gòu)造方法中默認(rèn)有一個(gè)super()。子類(lèi)要使用父類(lèi)的成員變量,這個(gè)初始化,必須在子類(lèi)初始化之前完成。所以,子類(lèi)的初始化過(guò)程中,會(huì)先執(zhí)行父類(lèi)的初始化。

2.如果父類(lèi)沒(méi)有無(wú)參構(gòu)造方法

•使用super調(diào)用父類(lèi)的帶參構(gòu)造。推薦方式。

•使用this調(diào)用本身的其他構(gòu)造。

靜態(tài)代碼塊、構(gòu)造代碼塊,構(gòu)造方法的執(zhí)行順序:

父類(lèi)靜態(tài)代碼塊→子類(lèi)靜態(tài)代碼塊→父類(lèi)構(gòu)造代碼塊→父類(lèi)構(gòu)造方法→子類(lèi)構(gòu)造代碼塊→子類(lèi)構(gòu)造方法

final關(guān)鍵字

final是一個(gè)關(guān)鍵字,可以用于修飾類(lèi),成員變量,成員方法。

特點(diǎn):

它修飾的類(lèi)不能被繼承。

它修飾的成員變量是一個(gè)常量。

它修飾的成員方法是不能被子類(lèi)重寫(xiě)的。

final修飾的常量定義一般都有書(shū)寫(xiě)規(guī)范,被final修飾的常量名稱(chēng),所有字母都大寫(xiě)。

final修飾成員變量,必須初始化,初始化有兩種

顯示初始化;

構(gòu)造方法初始化。
但是不能兩個(gè)一起初始化

final和private的區(qū)別:

final修飾的類(lèi)可以訪(fǎng)問(wèn);
private不可以修飾外部類(lèi),但可以修飾內(nèi)部類(lèi)(其實(shí)把外部類(lèi)私有化是沒(méi)有意義的)。

final修飾的方法不可以被子類(lèi)重寫(xiě);
private修飾的方法表面上看是可以被子類(lèi)重寫(xiě)的,其實(shí)不可以,子類(lèi)是看不到父類(lèi)的私有方法的。

final修飾的變量只能在顯示初始化或者構(gòu)造函數(shù)初始化的時(shí)候賦值一次,以后不允許更改;
private修飾的變量,也不允許直接被子類(lèi)或一個(gè)包中的其它類(lèi)訪(fǎng)問(wèn)或修改,但是他可以通過(guò)set和get方法對(duì)其改值和取值。


多態(tài)

概念:

對(duì)象在不同時(shí)刻表現(xiàn)出來(lái)的不同狀態(tài)。

多態(tài)的前提:

要有繼承或者實(shí)現(xiàn)關(guān)系。

要有方法的重寫(xiě)。

要有父類(lèi)引用指向子類(lèi)對(duì)象。

程序中的體現(xiàn):

父類(lèi)或者接口的引用指向或者接收自己的子類(lèi)對(duì)象。

好處和作用:

多態(tài)的存在提高了程序的擴(kuò)展性和后期可維護(hù)性。

弊端:

父類(lèi)調(diào)用的時(shí)候只能調(diào)用父類(lèi)里的方法,不能調(diào)用子類(lèi)的特有方法,因?yàn)槟悴⒉磺宄?lái)會(huì)有什么樣的子類(lèi)繼承你。

多態(tài)的成員特點(diǎn):

成員變量:編譯時(shí)期:看引用型變量所屬的類(lèi)中是否有所調(diào)用的變量;

運(yùn)行時(shí)期:也是看引用型變量所屬的類(lèi)是否有調(diào)用的變量。

成員變量無(wú)論編譯還是運(yùn)行都看引用型變量所屬的類(lèi),簡(jiǎn)單記成員變量,編譯和運(yùn)行都看等號(hào)左邊。

成員方法:編譯時(shí)期:要查看引用變量所屬的類(lèi)中是否有所調(diào)用的成員;

運(yùn)行時(shí)期:要查看對(duì)象所屬的類(lèi)中是否有所調(diào)用的成員。如果父子出現(xiàn)同名的方法,會(huì)運(yùn)行子類(lèi)中的方法,因?yàn)榉椒ㄓ懈采w的特性。

編譯看左邊運(yùn)行看右邊。

靜態(tài)方法:編譯時(shí)期:看的引用型變量所屬的類(lèi)中是否有所調(diào)用的變量;

運(yùn)行時(shí)期:也是看引用型變量所屬的類(lèi)是否有調(diào)用的變量。

編譯和運(yùn)行都看等號(hào)左邊。

一定不能夠?qū)⒏割?lèi)的對(duì)象轉(zhuǎn)換成子類(lèi)類(lèi)型!

父類(lèi)的引用指向子類(lèi)對(duì)象,該引用可以被提升,也可以被強(qiáng)制轉(zhuǎn)換。

多態(tài)自始至終都是子類(lèi)對(duì)象在變化!

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
//多態(tài)向下轉(zhuǎn)型和向上轉(zhuǎn)型的例子,多態(tài)轉(zhuǎn)型解決了多態(tài)中父類(lèi)引用不能使用子類(lèi)特有成員的弊端。
class PolymorphicTest2 {
  public static void main(String[] args) {
    Phone p1 = new Nokia();    //向上轉(zhuǎn)型,類(lèi)型提升
    Nokia no = (Nokia)p1;     //向下轉(zhuǎn)型,強(qiáng)制將父類(lèi)的引用轉(zhuǎn)換成子類(lèi)類(lèi)型,不能將Nokia類(lèi)型轉(zhuǎn)成Moto或Nexus類(lèi)型
    no.print();           //輸出結(jié)果為Phone---null---0,因?yàn)槔^承了父類(lèi)的方法
 
    Phone p2 = new Moto();
    Moto m = (Moto)p2;
    m.print();          //輸出結(jié)果為Moto---yellow---1599,方法重寫(xiě),子類(lèi)方法覆蓋父類(lèi)方法
 
    Phone p3 = new Nexus();
    Nexus ne = (Nexus)p3;
    ne.print();
  }
}
 
class Phone{ 
  String color;
  int price;
 
  public void print(){
    System.out.println("Phone---" + color + "---" + price );
  
}
 
class Nokia extends Phone{
  String color = "red";
  int price = 1009;
 
  //public void print(){
  //  System.out.println("Nokia---" + color + "---" + price);
  //}
}
 
class Moto extends Phone{
  String color = "yellow";
  int price = 1599;
 
  public void print(){
    System.out.println("Moto---" + color + "---" + price);
  }
}
 
class Nexus extends Phone{
  String color = "black";
  int price = 1999;
 
  public void print(){
    System.out.println("Nexus---" + color + "---" + price);
  }
}
}

抽象(abstract)

抽象就是從多個(gè)事物中將共性的,本質(zhì)的內(nèi)容抽象出來(lái)。

抽象類(lèi):

Java中可以定義沒(méi)有方法體的方法,該方法的具體實(shí)現(xiàn)由子類(lèi)完成,該方法稱(chēng)為抽象方法,包含抽象方法的類(lèi)就是抽象類(lèi)。

由來(lái):

多個(gè)對(duì)象都具備相同的功能,但是功能具體內(nèi)容有所不同,那么在抽取過(guò)程中,只抽取了功能定義,并未抽取功能主體,那么只有功能聲明,沒(méi)有功能主體的方法稱(chēng)為抽象方法。

抽象類(lèi)特點(diǎn):

抽象方法一定在抽象類(lèi)中;

抽象方法和抽象類(lèi)都必須被abstract關(guān)鍵字修飾;

抽象類(lèi)不可以用new創(chuàng)建對(duì)象,因?yàn)檎{(diào)用抽象方法沒(méi)意義;

抽象類(lèi)中的抽象方法要被使用,必須由子類(lèi)復(fù)寫(xiě)其所有的抽象方法后,建立子類(lèi)對(duì)象調(diào)用; 如果子類(lèi)只覆蓋了部分的抽象方法,那么該子類(lèi)還是一個(gè)抽象類(lèi);

抽象類(lèi)中可以有抽象方法,也可以有非抽象方法,抽象方法用于子類(lèi)實(shí)例化;

如果一個(gè)類(lèi)是抽象類(lèi),那么,繼承它的子類(lèi),要么是抽象類(lèi),要么重寫(xiě)所有抽象方法。

特殊:抽象類(lèi)中可以不定義抽象方法,這樣做僅僅是不讓該類(lèi)建立對(duì)象。

抽象類(lèi)的成員特點(diǎn):

成員變量:可以是變量,也可以是常量;

構(gòu)造方法:有構(gòu)造方法;

成員方法:可以是抽象方法,也可以是非抽象方法。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
abstract class 葵花寶典 {
  public abstract void 自宮();
}
 
class 岳不群 extends 葵花寶典 {
  public void 自宮(){
    System.out.println("剪刀");
  }
}
 
class 林平之 extends 葵花寶典{
  public void 自宮(){
    System.out.println("指甲刀");
  }
}
class AbstractTest {
  public static void main(String[] args) {
    岳不群 岳 = new 岳不群();
    岳.自宮();
 
    林平之 林 = new 林平之();
    林.自宮();
  }
}

抽象類(lèi)注意事項(xiàng):

抽象類(lèi)不能被實(shí)例化,為什么還有構(gòu)造函數(shù)?

只要是class定義的類(lèi)里面就肯定有構(gòu)造函數(shù)。抽象類(lèi)中的函數(shù)是給子類(lèi)實(shí)例化的。

一個(gè)類(lèi)沒(méi)有抽象方法,為什么定義為抽象類(lèi)?

不想被繼承,還不想被實(shí)例化。

抽象關(guān)鍵字abstract不可以和哪些關(guān)鍵字共存?

final:如果方法被抽象,就需要被覆蓋,而final是不可以被覆蓋,所以沖突。

private:如果函數(shù)被私有了,子類(lèi)無(wú)法直接訪(fǎng)問(wèn),怎么覆蓋呢?

static:不需要對(duì)象,類(lèi)名就可以調(diào)用抽象方法。而調(diào)用抽象方法沒(méi)有意義。

接口(interface)

接口是抽象方法和常量值的集合。從本質(zhì)上講,接口是一種特殊的抽象類(lèi),這種抽象類(lèi)只包含常量和方法的定義,而沒(méi)有變量和方法的實(shí)現(xiàn)。

格式:interface 接口名{}

接口的出現(xiàn)將”多繼承“通過(guò)另一種形式體現(xiàn)出來(lái),即”多實(shí)現(xiàn)“。

實(shí)現(xiàn)(implements)

格式:class 類(lèi)名 implements 接口名 {}

特點(diǎn):

接口不能被實(shí)例化。

一個(gè)類(lèi)如果實(shí)現(xiàn)了接口,要么是抽象類(lèi),要么實(shí)現(xiàn)接口中的所有方法。

接口的成員特點(diǎn):

接口中的成員修飾符是固定的!

成員常量:public static final,接口里定義的變量是全局常量,而且修飾符只能是這三個(gè)關(guān)鍵字,都可以省略,常量名要大寫(xiě)。

成員方法:public abstract,接口里定義的方法都是抽象的,兩個(gè)修飾符關(guān)鍵字可省略。

推薦:永遠(yuǎn)手動(dòng)給出修飾符。

繼承與實(shí)現(xiàn)的區(qū)別:

類(lèi)與類(lèi)之間稱(chēng)為繼承關(guān)系:因?yàn)樵擃?lèi)無(wú)論是抽象的還是非抽象的,它的內(nèi)部都可以定義非抽象方法,這個(gè)方法可以直接被子類(lèi)使用,子類(lèi)繼承即可。只能單繼承,可以多層繼承。((class))

類(lèi)與接口之間是實(shí)現(xiàn)關(guān)系:因?yàn)榻涌谥械姆椒ǘ际浅橄蟮模仨氂勺宇?lèi)實(shí)現(xiàn)才可以實(shí)例化。可以單實(shí)現(xiàn),也可以多實(shí)現(xiàn);還可以在繼承一個(gè)類(lèi)的同時(shí)實(shí)現(xiàn)多個(gè)接口。((class) extends (class) implements (interface1,interface2…))

接口與接口之間是繼承關(guān)系:一個(gè)接口可以繼承另一個(gè)接口,并添加新的屬性和抽象方法,并且接口可以多繼承。((interface) extends (interface1,interface2…))

抽象類(lèi)和接口的區(qū)別:

成員變量

抽象類(lèi)能有變量也可以有常量

接口只能有常量

成員方法

抽象類(lèi)可以有非抽象的方法,也可以有抽象的方法

接口只能有抽象的方法

構(gòu)造方法

-抽象類(lèi)有構(gòu)造方法
-接口沒(méi)有構(gòu)造方法

類(lèi)與抽象類(lèi)和接口的關(guān)系

類(lèi)與抽象類(lèi)的關(guān)系是繼承 extends

類(lèi)與接口的關(guān)系是實(shí)現(xiàn) implements

接口的思想特點(diǎn):

1.接口是對(duì)外暴露的規(guī)則;

2.接口是程序的功能擴(kuò)展;

3.接口的出現(xiàn)降低耦合性;(實(shí)現(xiàn)了模塊化開(kāi)發(fā),定義好規(guī)則,每個(gè)人實(shí)現(xiàn)自己的模塊,大大提高了開(kāi)發(fā)效率)

4.接口可以用來(lái)多實(shí)現(xiàn);

5.多個(gè)無(wú)關(guān)的類(lèi)可以實(shí)現(xiàn)同一個(gè)接口;

6.一個(gè)類(lèi)可以實(shí)現(xiàn)多個(gè)相互直接沒(méi)有關(guān)系的接口;

7.與繼承關(guān)系類(lèi)似,接口與實(shí)現(xiàn)類(lèi)之間存在多態(tài)性。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
//運(yùn)動(dòng)員和教練的案例(下圖是思路分析)
 
/*
  籃球運(yùn)動(dòng)員和教練
  乒乓球運(yùn)動(dòng)員和教練
  現(xiàn)在籃球運(yùn)動(dòng)員和教練要出國(guó)訪(fǎng)問(wèn),需要學(xué)習(xí)英語(yǔ)
  請(qǐng)根據(jù)你所學(xué)的知識(shí),分析出來(lái)哪些是類(lèi),哪些是抽象類(lèi),哪些是接口
*/
interface SpeakEnglish {
  public abstract void speak();
}
 
interface GoAboard{
  public abstract void aboard();
}
 
abstract class Person {
  private String name;
  private int age;
 
  public Person(){}
 
  public Person(String name,int age){
    this.name = name;
    this.age = age;
  }
 
  public void setName(String name){
    this.name = name;
  }
  public String getName(){
    return name;
  }
 
  public void setAge(int age){
    this.age = age;
  }
  public int getAge(){
    return age;
  }
 
  //吃飯
  public abstract void eat();
  //睡覺(jué)
  public void sleep(){
    System.out.println("Zzz...");
  }
}
//運(yùn)動(dòng)員
abstract class Player extends Person {
  public abstract void study();
}
//教練
abstract class Coach extends Person {
  public abstract void teach();
}
 
//籃球運(yùn)動(dòng)員
class BasketballPlayer extends Player implements SpeakEnglish,GoAboard{
  public void eat(){
    System.out.println(getAge() + "歲的" + getName() + "吃雞腿");
  }
 
  public void study(){
    System.out.println(getAge() + "歲的" + getName() + "學(xué)扣籃");
  }
 
  public void speak(){
    System.out.println(getAge() + "歲的" + getName() + " Say Hello World");
  }
 
  public void aboard(){
    System.out.println(getAge() + "歲的" + getName() + " Go Aboard");
  }
}
//乒乓運(yùn)動(dòng)員
class PingPangPlayer extends Player{
  public void eat(){
    System.out.println(getAge() + "歲的" + getName() + "吃雞蛋");
  }
 
  public void study(){
    System.out.println(getAge() + "歲的" + getName() + "學(xué)扣球");
  }
}
//籃球教練
class BasketballCoach extends Coach implements SpeakEnglish {
  public void eat(){
    System.out.println(getAge() + "歲的" + getName() + "啃雞爪");
  }
 
  public void teach(){
    System.out.println(getAge() + "歲的" + getName() + "教扣籃");
  }
 
  public void speak(){
    System.out.println(getAge() + "歲的" + getName() + " Say Hello Java");
  }
 
  public void aboard(){
    System.out.println(getAge() + "歲的" + getName() + " Go Aboard");
  }
}
//乒乓球教練
class PingPangCoach extends Coach{
  public void eat(){
    System.out.println(getAge() + "歲的" + getName() + "吃雞蛋皮");
  }
 
  public void teach(){
    System.out.println(getAge() + "歲的" + getName() + "教扣球");
  }
}
class PlayerAndCoach {
  public static void main(String[] args) {
    //籃球運(yùn)動(dòng)員
    BasketballPlayer bp = new BasketballPlayer();
    bp.setName("郭艾倫");
    bp.setAge(33);
    bp.eat();
    bp.sleep();
    bp.study();
    bp.speak();
    bp.aboard();
    System.out.println("***********************");
    //籃球教練
    BasketballCoach bc = new BasketballCoach();
    bc.setName("波波維奇");
    bc.setAge(65);
    bc.eat();
    bc.sleep();
    bc.teach();
    bc.speak();
    bc.aboard();
    System.out.println("***********************");
    //多態(tài)
    Person p = new BasketballPlayer();
    p.setName("Kobe Bryant");
    p.setAge(33);
    p.eat();
    p.sleep();
    //p.study();
    //p.speak();
 
    BasketballPlayer bp2 = (BasketballPlayer)p;
    bp2.study();
    bp2.speak();
    bp2.aboard();
    System.out.println("***********************");
  }
}

內(nèi)部類(lèi)

將一個(gè)類(lèi)定義在另一個(gè)類(lèi)里面,里面的那個(gè)類(lèi)就稱(chēng)為內(nèi)部類(lèi)。內(nèi)部類(lèi)的出現(xiàn),再次打破了Java單繼承的局限性。

訪(fǎng)問(wèn)特點(diǎn):

內(nèi)部類(lèi)可以直接訪(fǎng)問(wèn)外部類(lèi)的成員,包括私有成員。

外部類(lèi)要訪(fǎng)問(wèn)內(nèi)部類(lèi)的成員,必須要建立內(nèi)部類(lèi)的對(duì)象。

內(nèi)部類(lèi)分類(lèi)及共性:

共性:

內(nèi)部類(lèi)仍然是一個(gè)獨(dú)立的類(lèi),在編譯之后會(huì)內(nèi)部類(lèi)會(huì)被編譯成獨(dú)立的.class文件,但是前面冠以外部類(lèi)的類(lèi)名和$符號(hào)。

內(nèi)部類(lèi)不能用普通的方式訪(fǎng)問(wèn)。內(nèi)部類(lèi)是外部類(lèi)的一個(gè)成員,因此內(nèi)部類(lèi)可以自由地訪(fǎng)問(wèn)外部類(lèi)的成員變量,無(wú)論是否是private的。

成員內(nèi)部類(lèi)

在外部類(lèi)中有成員變量和成員方法,成員內(nèi)部類(lèi)就是把整個(gè)一個(gè)類(lèi)作為了外部類(lèi)的成員;

成員內(nèi)部類(lèi)是定義在類(lèi)中方法外的類(lèi);

創(chuàng)建對(duì)象的格式為:外部類(lèi)名.內(nèi)部類(lèi)名 對(duì)象名 = 外部類(lèi)對(duì)象.內(nèi)部類(lèi)對(duì)象;

成員內(nèi)部類(lèi)之所以可以直接訪(fǎng)問(wèn)外部類(lèi)的成員,那是因?yàn)閮?nèi)部類(lèi)中都持有一個(gè)外部類(lèi)對(duì)象的引用:外部類(lèi)名.this;

成員內(nèi)部類(lèi)可以用的修飾符有final,abstract,public,private,protected,static.

靜態(tài)內(nèi)部類(lèi)

靜態(tài)內(nèi)部類(lèi)就是成員內(nèi)部類(lèi)加上靜態(tài)修飾符static,定義在類(lèi)中方法外。

在外部類(lèi)中訪(fǎng)問(wèn)靜態(tài)內(nèi)部類(lèi)有兩種場(chǎng)景:

在外部類(lèi)中訪(fǎng)問(wèn)靜態(tài)內(nèi)部類(lèi)中非靜態(tài)成員:*外部類(lèi)名.內(nèi)部類(lèi)名 對(duì)象名 = 外部類(lèi)名.內(nèi)部對(duì)象*,需要通過(guò)創(chuàng)建對(duì)象訪(fǎng)問(wèn);

在外部類(lèi)中訪(fǎng)問(wèn)靜態(tài)內(nèi)部類(lèi)中的靜態(tài)成員:同樣可以使用上面的格式進(jìn)行訪(fǎng)問(wèn),也可以直接使用外部類(lèi)名.內(nèi)部類(lèi)名.成員。

局部?jī)?nèi)部類(lèi)

局部?jī)?nèi)部類(lèi)是定義在方法中的類(lèi)。

方法內(nèi)部類(lèi)只能在定義該內(nèi)部類(lèi)的方法內(nèi)實(shí)例化,不可以在此方法外對(duì)其實(shí)例化。

方法內(nèi)部類(lèi)對(duì)象不能使用該內(nèi)部類(lèi)所在方法的非final局部變量。

可以用于方法內(nèi)部類(lèi)的修飾符有final,abstract;

靜態(tài)方法中的方法內(nèi)部類(lèi)只能訪(fǎng)問(wèn)外部的靜態(tài)成員。

匿名內(nèi)部類(lèi)

匿名內(nèi)部類(lèi)是內(nèi)部類(lèi)的簡(jiǎn)化寫(xiě)法,是建立一個(gè)帶內(nèi)容的外部類(lèi)或者接口的子類(lèi)匿名對(duì)象。

前提:

內(nèi)部類(lèi)可以繼承或?qū)崿F(xiàn)一個(gè)外部類(lèi)或者接口。

格式:

new 外部類(lèi)名或者接口名(){重寫(xiě)方法};

通常在方法的形式參數(shù)是接口或者抽象類(lèi),并且該接口中的方法不超過(guò)三個(gè)時(shí),可以將匿名內(nèi)部類(lèi)作為參數(shù)傳遞。

不同修飾符修飾的內(nèi)容(和內(nèi)部類(lèi)無(wú)關(guān))

 

  類(lèi) 成員變量 成員方法 構(gòu)造方法
private   Y Y Y
默認(rèn) Y Y Y Y
protected   Y Y Y
public Y Y Y Y
abstract Y   Y  
static   Y Y Y
final Y Y Y  

 

 注意,常見(jiàn)規(guī)則如下:

•以后,所有的類(lèi)都用public修飾。并且,在一個(gè)java文件中,只寫(xiě)一個(gè)類(lèi)。

•以后,所有的成員變量用private修飾。

•以后,所有的成員方法用public修飾。

如果是抽象類(lèi)或者接口:public abstract + …

•以后,所有的構(gòu)造方法用public修飾。

如果類(lèi)是工具類(lèi)或者單例類(lèi):構(gòu)造用private修飾

四種權(quán)限修飾符

 

  本類(lèi) 同包(無(wú)關(guān)類(lèi)或子類(lèi)) 不同包(子類(lèi)) 不同包(無(wú)關(guān)類(lèi))
private Y      
默認(rèn) Y Y    
protected Y Y Y  
public Y Y Y Y

 

 推薦:

•成員變量 private

•構(gòu)造方法 public

•成員方法 public

以上這篇淺談java 面對(duì)對(duì)象(抽象 繼承 接口 多態(tài))就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持服務(wù)器之家。

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 中文字幕永久第一页 | www.天天操.com | 久久久青草婷婷精品综合日韩 | 欧美午夜寂寞影院 | 成年人黄色一级片 | 成人午夜性成交 | 国产黄色电影 | 亚洲欧美激情在线 | 亚洲国产中文字幕在线 | 午夜看片| 国产99久久精品一区二区永久免费 | 精品久久国产 | 亚洲欧美激情精品一区二区 | 成人男女啪啪免费观软件 | 久久国产成人 | 精品久久久久久久久久 | 日韩中文字幕在线观看 | 久久er99热精品一区二区 | 久久久国产精品 | 亚洲欧洲久久 | 国产一区二区免费 | 日韩在线亚洲 | 亚洲中字幕 | 欧美一级高清在线 | 成人欧美一区二区三区在线观看 | 国产精品久久久久久久久图文区 | 色站综合 | 中文字幕精品一区久久久久 | 久久人| 不用播放器看av | 中文字幕av网站 | 欧美一区二区三区免费观看视频 | 亚洲成av人片在线观看无 | 午夜伦4480yy私人影院 | 国产精品v| 中文字幕在线观看不卡视频 | 欧洲色视频 | 在线观看免费视频黄 | 成年人精品视频 | 欧美性猛片 | 国产精品久久久久久久久久三级 |