抽象类如何将子类作为成员的类型

想写一个List,其中Node的定义如下:

 public abstract class Node{
    public Node son=null;//为了测试方便,使用public
    //……还有好多
}

这样是想以后用的时候可以继承Node再添加实体。显然这么定义是不行的,因为以下代码可以通过:

A a=new A();//A extends Node
a.son=new B();//B extends Node

那么怎么定义呢?
PS:如果写成

 public class Node<T>{
    private Node son=null;
    private T t=null;
}

这样然后实体作为参数传给Node可以实现的这种事情我也是知道的。单纯是觉得不美丽。

不知道你要表达什么意思。
son 定义为私有,定义公有的 getSon/setSon,那么子类重写 setSon() 可以对赋值的类型进行校验啊。
A 子类的 setSon 只接受 A 不接受 B(如果B没有继承A的话)。