java技术难点_Java核心技术第四章----对象与类重难点总结
一、類之間的關系
類和類之間的關系,耦合度從高到低:
is -a。繼承、實現
has-a。組合、聚合、關聯
user-a。依賴。
要求是:高內聚、低耦合。
繼承(“is-a”)
繼承(Inheritance),即“is-a”關系,是一種用于表示特殊與一般關系的。表示類與類(或者接口與接口)之間的父子關系。一般而言,如果類A擴展類B,類A不但包含從類B繼承的方法,還會擁有一些額外的功能。在JAVA中,用關鍵字extends表示繼承關系
實現(Implementation),表示一個類實現一個或多個接口的方法。接口定義好操作的集合,由實現類去完成接口的具體操作。在java中使用implements表示。
關聯(“has-a”)
是類與類之間的聯接。它使一個類知道另一個類的屬性和方法。 對于兩個相對獨立的對象,當一個對象的實例與另一個對象的一些特定實例存在固定的對應關系時,這兩個對象之間為關聯關系。關聯可以是雙向的,也可以是單向的。在JAVA中,關聯關系一般使用成員變量來實現。 在JAVA中,單向關聯表現為:類A當中使用了類B,其中類B是作為類A的成員變量。雙向關聯表現為:類A當中使用了類B作為成員變量;同時類B中也使用了類A作為成員變量。
單向關聯:
雙向關聯:
class Car {
public static void run(){
System.out.println("汽車在奔跑");
}
}
class Driver {
//使用成員變量形式實現關聯
Car mycar;
public void drive(){
mycar.run();
}
}
依賴(“has-a”)
是一種最明顯的、最常見的關系。依賴關系表示一個類依賴于另一個類的定義,一個類的方法操縱另一個類的對象。一般而言,依賴關系在JAVA中體現為局域變量、方法的形參,或者對靜態方法的調用。
例如,一個人(Driver)可以開車(Car),Driver類依賴于Car類的定義,因為Driver類引用了Car。與關聯不同的是,Driver類里并沒有Car類型的屬性,Car的實例是以參量的方式傳入到Driver類的方法中去的。
class Car {
public static void run(){
System.out.println("汽車在奔跑");
}
}
class Driver {
//使用形參方式發生依賴關系
public void drive1(Car car){
car.run();
}
//使用局部變量發生依賴關系
public void drive2(){
Car car = new Car();
car.run();
}
//使用靜態變量發生依賴關系
public void drive3(){
Car.run();
}
}
二、Java類的訪問權限
Java有四種訪問權限, 其中三種有訪問權限修飾符,分別為private,public和protected,還有一種不帶任何修飾符。
1、 private: Java語言中對訪問權限限制的最窄的修飾符,一般稱之為“私有的”。被其修飾的類、屬性以及方法只能被該類的對象訪問,其子類不能訪問,更不能允許跨包訪問。
2、default:即不加任何訪問修飾符,通常稱為“默認訪問模式“。該模式下,只允許在同一個包中進行訪問。
3、protect: 介于public 和 private 之間的一種訪問修飾符,一般稱之為“保護形”。被其修飾的類、屬性以及方法只能被類本身的方法及子類訪問,即使子類在不同的包中也可以訪問。
4、public: Java語言中訪問限制最寬的修飾符,一般稱之為“公共的”。被其修飾的類、屬性以及方法不僅可以跨類訪問,而且允許跨包(package)訪問。
下面用表格的形式來展示四種訪問權限之間的異同點,這樣會更加形象。表格如下所示:
三、final關鍵詞的作用
1、final修飾類中的屬性或者變量
無論屬性是基本類型還是引用類型,final所起的作用都是變量里面存放的“值”不能變。
這個值,對于基本類型來說,變量里面放的就是實實在在的值,如1,“abc”等。
而引用類型變量里面放的是個地址,所以用final修飾引用類型變量指的是它里面的地址不能變,并不是說這個地址所指向的對象或數組的內容不可以變,這個一定要注意。
例如:類中有一個屬性是final Person p=new Person("name"); 那么你不能對p進行重新賦值,但是可以改變p里面屬性的值,p.setName('newName');
final修飾屬性,聲明變量時可以不賦值,而且一旦賦值就不能被修改了。對final屬性可以在三個地方賦值:聲明時、初始化塊中、構造方法中。總之一定要賦值。
2、final修飾類中的方法
作用:可以被繼承,但繼承后不能被重寫。
3、final修飾類
作用:類不可以被繼承。
四、static關鍵詞的作用
1、static可以修飾變量,方法
2、被static修飾的變量或者方法是獨立于該類的任何對象,也就是說,這些變量和方法不屬于任何一個實例對象,而是被類的實例對象所共享。
3、在類被加載的時候,就會去加載被static修飾的部分。
4、被static修飾的變量或者方法是優先于對象存在的,也就是說當一個類加載完畢之后,即便沒有創建對象,也可以去訪問。
五、Java對象是否采用的是引用調用
不是,在Java調用方法是采用“單向傳值”,即調用方法時會將實參的值或地址拷貝一份給形參。形參的值(或地址)發生變化與實參無關,但如果是引用類型的可以改變所指對象中的值。
也就是說調用方法是無法進行交換的無論是數值類型還是引用類型的變量,但可以改變引用類型所指對象的數據。
六、重載(Overload)和重寫(Override)的區別。重載的方法能否根據返回類型進行區分?
答:方法的重載和重寫都是實現多態的方式,區別在于前者實現的是編譯時的多態性,而后者實現的是運行時的多態性。重載發生在一個類中,同名的方法如果有不同的參數列表(參數類型不同、參數個數不同或者二者都不同)則視為重載;重寫發生在子類與父類之間,重寫要求子類被重寫方法與父類被重寫方法有相同的參數列表,有兼容的返回類型,比父類被重寫方法更好訪問,不能比父類被重寫方法聲明更多的異常(里氏代換原則)。重載對返回類型沒有特殊的要求,不能根據返回類型進行區分
七、構造器中調構造器
在Java中可以使用this調用此類的構造器,可以使用super調用父類的構造器
public A(int a){
this();
super();
}
八、初始化代碼塊
在Java中大家熟知的初始化成員變量的方法有:在聲明中賦值和在構造器中設置值。其實還有第三種機制,稱為初始化塊。在一個類的聲明中,可以包含多個代碼塊。只要構造類的對象,這些快就會被執行。例如:
class A{
int a;
{
a=10;
}
}
總結
以上是生活随笔為你收集整理的java技术难点_Java核心技术第四章----对象与类重难点总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 骁龙8+年度爆款旗舰稳了 小米12S系列
- 下一篇: 国航东航南航购买292架空客飞机:空客股