文章目錄
2020年6月26日
java
類方法不能調用實例變量
類方法調用實例變量只能通過在方法中聲明一個實例後在調用,否則只能將實例變量改變爲類變量
對象初始化:
構造方法類似於C++的構造函數,方法名和類名相同,不返回返回類型,通常爲公有的 引用類型的初值是null,基本數據類型的初始值是0或0.0 構造方法也可以重載(參數表必須不同) 像C++一樣,不聲明構造方法,編譯器會構造默認構造方法(在聲明構造方法之後不會自動生成) 可以使用this關鍵字在一個構造方法中調用另一個構造方法:this("",99999,0.0f),一般是在參數少的構造方法中調用參數最多的構造方法。 final實例變量可以在定義時給出初始值,也可以在構造方法中初始化。 但是final類變量必須在聲明的同時初始化。
內存回收
沒有引用指向new Book(3)對象,所以會被回收
枚舉類
有限
枚舉類不能有public的構造方法
import java.util.*;
enum Season
{
dgh,shi,zuibang,de
}
class test
{
public static void main (String[] args) throws java.lang.Exception
{
for(Season s : Season.values())
System.out.println(s);
}
}
dgh
shi
zuibang
de
重寫toString()方法
import java.util.*;
enum Season
{
dgh,shi,zuibang,de
}
class test
{
String name;
public String toString()
{
return "這個對象這個對象這個對象name:"+name;
}
public test(String name)
{
this.name = name;
}
public static void main (String[] args) throws java.lang.Exception
{
test t = new test("dgh");
System.out.println(t);
}
}
這個對象這個對象這個對象name:dgh
2020年6月27日06:36:54
java
類的繼承:
java中只支持單繼承,一個類只能有一個直接超類;子類包括與超類相同的接口,可以具有更多的方法和數據成員;class ClassName extends SuperClassName{};;person->Employee->Manager;
隱藏和覆蓋
隱藏和覆蓋:子類可以重新定義超類的方法,超類的同名方法或同名數據成員會被覆蓋,也就是隱藏了。如果重複聲明,直接訪問是子類的成員,使用super.x是訪問超類的屬性
靜態成員不被繼承,但是子類都可以訪問超類的靜態成員
派生類必須覆蓋基類中的抽象的方法,否則派生類自身也成爲了抽象類;final方法不需覆蓋;static方法不可覆蓋;使用super.func()就可以調用超類的方法
import java.io.*;
class A{
int x = 1;
}
class B extends A
{
int x = 10;
public void print()
{
super.x++;
System.out.println(super.x);
}
}
class test
{
public static void main (String[] args) throws java.lang.Exception
{
B b = new B();
b.print();
// System.out.println("hi");
}
}
Object類
Object類:getClass()方法;toString()方法;同一:兩個引用是否指向同一對象;相等:兩個對象相等;a==b用於判斷兩個引用是否指向同一個對象,不能判斷對象是否相等;等效於a.equals(b)也是判斷同一
在對象被垃圾回收器回收之前,需要自動調用對象的finalize方法
clone()方法,在Object中是protected的,所以需要覆蓋爲public
getClass()方法可以返回對象的類,
它是一個final方法
可以通過函數參數obj.getClass().getName()來查詢類的各種信息,如名字,靜態數據等,這裏obj.getClass()相當於類名、
2020年6月28日
java
終結類和終結方法:
被final修飾;終結類不能繼承;終結方法不能被覆蓋;
參數表不一樣不算重寫
不能修飾interface的接口
抽象方法、
抽象類:類名前添加abstract;可包含常規類的任何成員;包括非抽象方法;沒有實例對象的類,不能使用new進行實例化,只能作爲超類;抽象方法:僅有方法原型,沒有方法體,具體實現有子類的各自類聲明中完成;要寫抽象方法,必須在抽象類中;具體方法:1、聲明一個抽象類,在類中聲明一個抽象方法,方法不具體實現,2、在子類中具體實現該抽象方法。
只有接口類可以包含接口方法
泛型
泛型:將類型參數化;泛型的類、接口、方法;class A ;使用時A a = new A();可以使用?作爲通配符
類的組合:
是一種類的重用機制,將已存在類的對象放在新類中;可能繼承和組合都用得上;
小結:類的重用:1、繼承和組合;2、Object類的主要方法,是所有類的超類;3、終結方法不許覆蓋;4、在最頂層的抽象超類中聲明原型,無法實現方法體;
接口與多態:
接口的概念和編寫;接口就是純的抽象類;接口中全部都是抽象方法,沒有具體實現;實現多繼承、具有統一的對外服務接口;多態:可以將子類對象充當超類對象用,統一發送相同的消息,不同對象對其的響應方式是不同的;
接口只提供設計,不提供具體實現,是一個純的抽象類;繼承多個設計;建立類與類之間的協議;在看起來不相干的對象之間建立相同的接口;interface 接口名稱 【extends 父接口名】;接口的數據成員一定有初值且不能修改,等價於省略final關鍵字;接口中的方法必須是“抽象方法”,可以省略public 和 abstract;;接口不能實例化;語法:public class A implements 接口名稱{實現接口的抽象方法;} 可以實現多個接口,利用多繼承:在implements後面添加多個接口,可以實現多重繼承;接口與接口之間也可以有繼承關係;接口支持多繼承,在extends後面可以有多個接口;
如果是抽象類可以實現部分接口中的抽象方法,但是如果時非抽象類,必須實現所有的接口抽象方法;