標籤:objects cme enc 紅/黑樹狀結構 stat on() eth override ==
一、在一個類中重寫toString方法
public class Person {private String name;private int age;public Person() {}public Person(String name, int age) {this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}@Overridepublic String toString() {// {name=name , age= age}return "{" + "name=" + getName() +"age=" + getAge() +"}";}// 重寫 equals @Overridepublic boolean equals(Object obj) {// 判斷記憶體位址是否相同if( this == obj ){ return true;}// 判斷 傳入的obj的對象是否為空白 obj的類型與當前類型是否相同if ( obj == null || this.getClass() != obj.getClass() ){ return false;}// 強轉 類型Person p = (Person) obj// 判斷傳入的obj對象 的 值是否為空白,判斷值是否相同,return this.age == p.age && Objects. equals( this.name,p.name )// 判斷 值是否相同}
二、泛型的定義和使用
可以 靈活地 將資料類型應用到不同的 類、方法、介面中 將資料類型做為參數進行傳遞
1。定義和使用含有泛型的類 ,方法,參數
定義格式:
修飾符 class 類名 <代表泛型的變數>{ }
例子:
// 泛型在類中使用 定義的 位置 位於 類名 後
public class Person <E>{
// 泛型作為參數 在 括弧裡
public boolean add (E e){
}
// 帶有 泛型 方法 位於 替換 方法類型
public E get(int index){
}
}
2.距離定義 泛型類
public class MyGenericClass<MVP> {
//沒有MVP類型,在這裡代表 未知的一種資料類型 未來傳遞什麼就是什麼類型
private MVP mvp;
public void setMVP(MVP mvp) {
this.mvp = mvp;
}
public MVP getMVP() {
return mvp;
}
}
3. 含有泛型的 方法 定義的格式
格式:
修飾符 <代表泛型的變數> 傳回值類型 方法名(參數){ }
public class MyGenericMethod {
public <MVP> void show(MVP mvp) {
System.out.println(mvp.getClass());
}
public <MVP> MVP show2(MVP mvp) {
return mvp;
}
}
4.含有泛型的介面
定義格式:
修飾符 interface 介面名 <代表泛型的變數>{ }
public interface MyGenericInterface<E>{
public abstract void add(E e);
public abstract E getE();
}
在定義類的時候 確定泛型 的類型
例如:
public class MyImp1 implements MyGenericInterface<String> {
@Override
public void add(String e) {
// 省略...
}
?
@Override
public String getE() {
return null;
}
}
2、始終不確定泛型的類型,直到建立對象時,確定泛型的類型
public class MyImp2<E> implements MyGenericInterface<E> {
@Override
public void add(E e) {
// 省略...
}
@Override
public E getE() {
return null;
}
}
/**
確定泛型
*/
public class GenericInterface {
public static void main(String[] args) {
MyImp2<String> my = new MyImp2<String>();
my.add("aa");
}
}
一、泛型的萬用字元
當使用 泛型類 或者介面時,傳遞的資料中,泛型的類型不確定,可以通過萬用字元<?>表示。但是一旦使用泛型萬用字元後,
只能使用Object類的共性方法,集合中自身方法無法使用。
1.萬用字元基本使用
泛型的萬用字元的:不知道什麼時候用什麼類型 來 接受的時候, 此時 可以使用 ? 表示未知萬用字元
例子:
public static void main(String[] args) {
Collection<Intger> list1 = new ArrayList<Integer>();
getElement(list1);
Collection<String> list2 = new ArrayList<String>();
getElement(list2);
}
public static void getElement(Collection<?> coll){}
//?代表可以接收任意類型
Notes: tips:泛型不存在繼承關係 Collection<Object> list = new ArrayList<String>();這種是錯誤的; 2.萬用字元進階使用----受限泛型 之前設定泛型的時候,實際上是可以任意設定的,只要是類 就可以設定。但是在Java的泛型中可以制定一個泛型的上線和下限 泛型的上限: 格式: 類型名稱<? extends 類> 對象名稱 意義:只能接收該 類型及其子類 泛型的下限: 格式 : 類型的名稱<? super 類> 對象名稱 意義: 只能 接收該類型 及其父類類型
例子: public static void main(String[] args) { Collection<Intger> list1 = new ArrayList<Integer>(); Collection<String> list2 = new ArrayList<String>(); Collection<Number> list3 = new ArrayList<Number>(); Collection<Object> list4 = new ArrayList<Object>(); getElement(list1); getElement(list2);//報錯 getElement(list3); getElement(list4);//報錯 getElement2(list1);//報錯 getElement2(list2);//報錯 getElement2(list3); getElement2(list4); } // 泛型的上限:此時的泛型?,必須是Number類型或者Number類型的子類 public static void getElement1(Collection<? extends Number> coll){} // 泛型的下限:此時的泛型?,必須是Number類型或者Number類型的父類 public static void getElement2(Collection<? super Number> coll){}
常見資料結構:
棧、隊列、數組、鏈表和紅/黑樹狀結構。
Java重寫toString和泛型的使用