泛型類:把泛型定義在類上
package Day16; //泛型類:把泛型定義在類上 public class ObjectDemo<T> { //把泛型定義在類上---呼叫時只能呼叫和添加本型別的資料 private T obj; public void setObj(T obj) { this.obj = obj; } public T getObj() { return obj; } }
package cn.itcast_04; /* * 泛型類的測驗 */ public class ObjectToolDemo { public static void main(String[] args) { // ObjectTool ot = new ObjectTool(); // // ot.setObj(new String("風清揚")); // String s = (String) ot.getObj(); // System.out.println("姓名是:" + s); // // ot.setObj(new Integer(30)); // Integer i = (Integer) ot.getObj(); // System.out.println("年齡是:" + i); // ot.setObj(new String("林青霞")); // // ClassCastException // Integer ii = (Integer) ot.getObj(); // System.out.println("姓名是:" + ii); System.out.println("-------------"); ObjectTool<String> ot = new ObjectTool<String>(); // ot.setObj(new Integer(27)); //這個時候編譯期間就過不去 ot.setObj(new String("林青霞")); String s = ot.getObj(); System.out.println("姓名是:" + s); ObjectTool<Integer> ot2 = new ObjectTool<Integer>(); // ot2.setObj(new String("風清揚"));//這個時候編譯期間就過不去 ot2.setObj(new Integer(27)); Integer i = ot2.getObj(); System.out.println("年齡是:" + i); } }
泛型類:泛型定義在方法上
格式:public <泛型類> 回傳值型別 方法名(泛型類 變數名)
package Day16; //泛型類:把泛型定義在類上 //public class ObjectDemo<T> { // //把泛型定義在類上---呼叫時只能呼叫和添加本型別的資料 // private T obj; // // public void setObj(T obj) { // this.obj = obj; // } // // public T getObj() { // return obj; // } //} //泛型定義在方法上 public class ObjectDemo{ //定義方法 public<T> void show(T s){ System.out.println(s); } }
package Day16; public class Lx8 { public static void main(String[] args) { //對ObjectDemo類創建 ObjectDemo A = new ObjectDemo(); //呼叫方法 A.show("趙同剛"); A.show(25); A.show("有錢"); A.show(true); } }
泛型介面的概述和使用
一:定義泛型介面
package Day16; //介面的定義格式:[修飾符] interface 介面名 [extends 父介面名串列] //泛型介面--把泛型定義在介面上 public interface JK<T> { //定義一個抽象方法 //實作類必須重寫此方法 public abstract void show(T f); }
二:實作類實作介面(分兩種情況)
package Day16; //介面的實作類 //實作類在實作介面的時候 ////第一種情況:已經知道該是什么型別的了 //實作類的書寫格式 [修飾符] class <類名> [extends 父類名] [implements 介面串列] //public class SX implements JK<String> { // //在實作類中重寫介面中的抽象方法 // public void show(String B){ // System.out.println(B); // } //} //第二種情況:實作類在實作介面的時候還不知道是什么型別 public class SX<T> implements JK<T>{ //實作類必須重寫介面中的抽象方法 public void show(T e){ System.out.println(e); } }
三:測驗類
package Day16; public class Lx9 { public static void main(String[] args) { //對介面實作類創建物件 SX AA = new SX(); //呼叫介面實作類當中的方法 AA.show(true); } }
泛型高級(通配符)
* 泛型高級(通配符)
* ?:任意型別,如果沒有明確,那么就是Object以及任意的Java類了
* ? extends E:向下限定,E及其子類
* ? super E:向上限定,E極其父類
package cn.itcast_07; import java.util.ArrayList; import java.util.Collection; /* * 泛型高級(通配符) * ?:任意型別,如果沒有明確,那么就是Object以及任意的Java類了 * ? extends E:向下限定,E及其子類 * ? super E:向上限定,E極其父類 */ public class GenericDemo { public static void main(String[] args) { // 泛型如果明確的寫的時候,前后必須一致 Collection<Object> c1 = new ArrayList<Object>(); // Collection<Object> c2 = new ArrayList<Animal>(); // Collection<Object> c3 = new ArrayList<Dog>(); // Collection<Object> c4 = new ArrayList<Cat>(); // ?表示任意的型別都是可以的 Collection<?> c5 = new ArrayList<Object>(); Collection<?> c6 = new ArrayList<Animal>(); Collection<?> c7 = new ArrayList<Dog>(); Collection<?> c8 = new ArrayList<Cat>(); // ? extends E:向下限定,E及其子類 // Collection<? extends Animal> c9 = new ArrayList<Object>(); Collection<? extends Animal> c10 = new ArrayList<Animal>(); Collection<? extends Animal> c11 = new ArrayList<Dog>(); Collection<? extends Animal> c12 = new ArrayList<Cat>(); // ? super E:向上限定,E極其父類 Collection<? super Animal> c13 = new ArrayList<Object>(); Collection<? super Animal> c14 = new ArrayList<Animal>(); // Collection<? super Animal> c15 = new ArrayList<Dog>(); // Collection<? super Animal> c16 = new ArrayList<Cat>(); } } class Animal { } class Dog extends Animal { } class Cat extends Animal { }
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/448068.html
標籤:Java
上一篇:Spring 學習筆記
下一篇:【JavaWeb-Ajax】筆記匯總 --- 全域重繪和區域重繪;ajax 中使用 XMLHttpRequest 物件(四步);json 的使用
