java入門基礎學習----泛型
概念:泛型就是引數化型別,使用廣泛的型別
作用:
1. 安全:在編譯的時候檢查型別安全; 2.省心:所有的強制轉換都是自動和隱式的,提高程式碼的重用率
一、 泛型類:宣告時使用泛型
字母:
T Type 表示型別
K V 分別代表兼職中的Key Value
E 代表Element
使用是確定型別
注意:
1.泛型只能使用引用型別,不能基本型別
2.泛型宣告時字母不能使用在 靜態屬性|靜態方法上
介面中泛型字母只能使用在方法中,不能使用在全域性常量中
泛型方法<>,返回型別前面
只能訪問物件的資訊,不能修改資訊(因為型別不確定)
二、抽象類繼承
package com.kennosaur.gen03;
/**
* 父類為泛型類
* 1.屬性
* 2.方法
*
* 要麼同時擦除,要麼子類大於等於父類的型別,
* 不能子類擦除,父類泛型
* 1.屬性型別
* 父類中,隨父類而定
* 子類中,隨子類而定
* 2.方法重寫
* 隨父類而定
* @author Administrator
*
* @param <T>
*/
public abstract class Father<T,T1> {
T name;
public abstract void test(T t);
}
/**
* 子類指定具體型別
* 屬性型別為具體型別
* 方法同理
*/
class Child1 extends Father<String,Integer>{
String t1;
@Override
public void test(String t) {
t1 = this.name;
}
}
/**
* 子類為泛型類,型別在使用時確定
*
*
*/
class Child2<T1,T> extends Father<T,T1>{
T t2;
@Override
public void test(T t) {
}
}
/**
* 子類為泛型,父類不指定型別---泛型的擦除,使用Object替換
*/
class Child3<T1, T2> extends Father{
@Override
public void test(Object t) {
}
}
/**
* 子類與父類同時擦除
*/
class Child4 extends Father{
@Override
public void test(Object t) {
}
}
/**
* 錯誤:子類擦除,父類使用泛型
*/
//class Child5 extends Father<T, T1>{
//
// @Override
// public void test(T t) {
//
// }
//
//}
三、介面泛型
package com.kennosaur.gen03;
/**
* 泛型介面:與繼承同理
* 重寫方法隨父類而定
* @author Administrator
*
* @param <T>
*/
public interface Comparable<T> {
void compare(T t);
}
//宣告子類指定具體型別
class Comp implements Comparable<Integer>{
@Override
public void compare(Integer t) {
// TODO Auto-generated method stub
}
}
//擦除
class Comp1 implements Comparable{
@Override
public void compare(Object t) {
// TODO Auto-generated method stub
}
}
//父類擦除,子類泛型
class Comp2<T> implements Comparable{
@Override
public void compare(Object t) {
// TODO Auto-generated method stub
}
}
//子類泛型>=父類泛型
class Comp3<T> implements Comparable<T>{
@Override
public void compare(T t) {
// TODO Auto-generated method stub
}
}
//父類泛型,子類擦除----錯誤
//class Comp4 implements Comparable<T>{
//
//}
四、泛型的擦除
1.繼承|實現宣告時不指定型別;
2.使用時不指定型別
統一Object對待
五、泛型沒有多型
萬用字元?
package com.kennosaur.gen04;
import com.kennosaur.gen01.App;
/**
* ?的使用:宣告型別|宣告方法上,不能宣告類或使用時
* ? extends: <=上限, 指定型別為子類或自身
* ? super : >=下限,指定型別為自身或父類
* @author Administrator
*
*/
public class Student<T> {
T score;
public static void main(String[] args) {
Student<?> stu = new Student<String>();
test(new Student<Integer>());
test2(new Student<Apple>());
//test3(new Student<Apple>()); 錯誤,泛型沒有多型
//test4(new Student<Apple>()); X錯誤
// stu = new Student<Fruit>();
// test4(stu); X錯誤
test4(new Student<Object>());
test4(new Student<Fruit>());
}
public static void test(Student<?> stu) {
}
public static void test2(Student<? extends Fruit> stu) {
}
public static void test3(Student<Fruit> stu) {
}
public static void test4(Student<? super Fruit> stu) {
}
}
泛型的巢狀:使用時從外到內,一層層拆分
泛型陣列是不存在的
沒有泛型陣列,不能建立泛型陣列
可以只有宣告,可以使用“?”宣告,沒有實際意義
相關文章
- java基礎複習-----泛型Java泛型
- JAVA泛型入門Java泛型
- Java基礎 —— 泛型Java泛型
- Java基礎-泛型Java泛型
- java 基礎 泛型Java泛型
- 【Java反射】Java 泛型基礎Java反射泛型
- Java基礎之泛型方法Java泛型
- Java基礎-泛型詳解Java泛型
- Java基礎之淺談泛型Java泛型
- Java基礎——深入理解泛型Java泛型
- Java入門教程十二(集合與泛型)Java泛型
- Java 基礎 一文搞懂泛型Java泛型
- JDK學習基礎入門(一)JDK
- JAVA基礎之九-泛型(通用型別)Java泛型型別
- 2023年零基礎怎麼學習Java入門?Java
- Redis 入門 - 五大基礎型別及其指令學習Redis型別
- Java 入門基礎Java
- TypeScript基礎--泛型TypeScript泛型
- Java基礎知識掃盲(四)——泛型Java泛型
- Pytest學習(一)- 入門及基礎
- node 學習筆記 基礎入門筆記
- Java泛型複習Java泛型
- Go泛型基礎使用Go泛型
- Linux入門學習(1基礎操作命令)Linux
- java初學者(零基礎如何入門),我適不適合學習JAVA?Java
- 基礎篇:深入解析JAVA泛型和Type型別體系Java泛型型別
- 0基礎學習Python該如何入門?Python學習方法!Python
- Linux運維基礎學習怎麼樣?linux基礎入門Linux運維
- 零基礎學Java需知:Java小白入門解疑大全Java
- java基礎(六):RabbitMQ 入門JavaMQ
- java web 動態web開發基礎入門學習 eclipse版(二)JavaWebEclipse
- Java零基礎小白必看的學習路線圖,快速入門!Java
- 使用 C# 入門深度學習:Pytorch 基礎C#深度學習PyTorch
- CTF入門學習5-> 前端JavaScript基礎前端JavaScript
- 零基礎學習Alfred(一):入門操作Alfred
- Linux 學習基礎入門之Linux分割槽Linux
- Vue2.x學習一:基礎入門Vue
- JAVA學習--JAVA基礎(一)Java