类模板(Class Template): 类模板---->类----->实例.
如果类别之间只是数据型态不同,那么是可以导出类别模板的.
C++模板有关键字Template: template <typename T>在类的声明和类中函数的在类外定义时都需要写在前面.
template <typename T>
class A{
public:
T number ;
void show\(\){
cout<<"number:"<<number<<endl;
}
};
Java模板:
class Data<T>{
private T value;
Data\(T v\){ value = v;}
public T Value\(\){return value;}
}
Data<String> sdata = new Data<String>();
Data<Long> idata = new Data<Long>();
模板是遇到一种数据类型就产生对应类型的一个类.
模板的继承:
abstract class Pair <T1,T2>{
T1 key;
T2 value;
Pair\(T1 k, T2 v\){
key = k;
value = v;
}
abstract public T1 get\_key\(\);
abstract public T2 get\_value\(\);
}
class myPair<T1,T2> extends Pair<T1,T2>{
myPair\(T1 a, T2 b\){
super\(a,b\);
}
@Override
public T1 get\_key\(\) {
// TODO Auto-generated method stub
return key;
}
@Override
public T2 get\_value\(\) {
// TODO Auto-generated method stub
return value;
}
}
public class Test13 {
public static void main\(String\[\] args\) {
// TODO Auto-generated method stub
Pair<String,Object> pa =
new myPair<String, Object>\("a1",new String\("myDog"\)\);
System.out.println\("key:"+pa.get\_key\(\)\);
System.out.println\("value:"+pa.get\_value\(\)\);
}
}
模板的组合:
class Pair1<T1,T2>{
T1 key;
T2 value;
Pair1\(T1 k, T2 v\){
key = k; value = v;
}
public T1 get\_key\(\){return key;}
public T2 get\_value\(\){return value;}
}
class Data<T>{
private T value;
Data\(T v\){value = v;}
public T value\(\){return value;}
}
public class Test14 {
public static void main\(String\[\] args\) {
// TODO Auto-generated method stub
Pair1<String,Integer> pa = new Pair1<String,Integer>\("k1",25\);
Data<Pair1<String,Integer>> da = new Data<Pair1<String,Integer>>\(pa\);
System.out.println\("key:"+da.value\(\).get\_key\(\)
+",value:"+da.value\(\).get\_value\(\)\);
}
}