📜  Java中的泛型类层次结构

📅  最后修改于: 2022-05-13 01:55:37.564000             🧑  作者: Mango

Java中的泛型类层次结构

泛型是指java5中引入的参数化类型。这些有助于创建类、接口、方法等。在称为“泛型类”或“泛型方法”的参数化类型上工作的类或方法。泛型是定义和使用泛型类型和方法的语言属性的组合。集合在泛型之前使用,泛型包含任何类型的对象,即非泛型。使用泛型,可以创建自动处理所有类型数据(整数、字符串、浮点数等)的单个类、接口或方法。它扩展了安全、轻松地重用代码的能力。泛型还提供类型安全(确保在执行该操作之前正在对正确类型的数据执行操作)。

继承允许分层分类。超类是一个被继承的类。子类是一个确实继承的类。它继承了超类定义的所有成员,并添加了自己的独特元素。这些使用扩展作为关键字来这样做。

有时泛型类的行为类似于超类或子类。在泛型层次结构中,所有子类都向上移动层次结构中泛型超类所必需的任何参数类型。这与在层次结构中向上移动构造函数参数相同。

示例 1:通用超类

Java
// Java Program to illustrate generic class hierarchies
 
// Importing all input output classes
import java.io.*;
 
// Helper class 1
// Class 1 - Parent class
class Generic1 {
    // Member variable of parent class
    T obj;
 
    // Constructor of parent class
    Generic1(T o1) { obj = o1; }
 
    // Member function of parent class
    // that returns an object
    T getobj1() { return obj; }
}
 
// Helper class 2
// Class 2 - Child class
class Generic2 extends Generic1 {
    // Member variable of child class
    V obj2;
    Generic2(T o1, V o2)
    {
        // Calling super class using super keyword
        super(o1);
 
        obj2 = o2;
    }
 
    // Member function of child class
    // that returns an object
    V getobj2() { return obj2; }
}
 
// Class 3 -  Main class
class GFG {
   
    // Main driver method
    public static void main(String[] args)
    {
        // Creating Generic2 (sub class) object
      // Custom inputs as parameters
        Generic2 x
            = new Generic2("value : ",
                                            100);
 
        // Calling method and printing
        System.out.println(x.getobj1());
        System.out.println(x.getobj2());
    }
}


Java
import java.io.*;
// non-generic super-class
class NonGen {
    int n;
    NonGen(int i) { n = i; }
    int getval() { return n; }
}
// generic class sub-class
class Gen extends NonGen {
    T obj;
    Gen(T o1, int i)
    {
        super(i);
        obj = o1;
    }
    T getobj() { return obj; }
}
 
class GFG {
    public static void main(String[] args)
    {
 
        Gen w = new Gen("Hello", 2021);
 
        System.out.println(w.getobj() + " " + w.getval());
    }
}


输出
value : 
100

示例 2:泛型子类的非泛型子类

Java

import java.io.*;
// non-generic super-class
class NonGen {
    int n;
    NonGen(int i) { n = i; }
    int getval() { return n; }
}
// generic class sub-class
class Gen extends NonGen {
    T obj;
    Gen(T o1, int i)
    {
        super(i);
        obj = o1;
    }
    T getobj() { return obj; }
}
 
class GFG {
    public static void main(String[] args)
    {
 
        Gen w = new Gen("Hello", 2021);
 
        System.out.println(w.getobj() + " " + w.getval());
    }
}
输出
Hello 2021