Introducing self containing objects (Node) In some programming languages, many data structures use Node&lt;T&gt; (The examples in the question are in Java, but I suppose they are similar in other languages):

public class Node&lt;T&gt; {
    T info;
    Node&lt;T&gt; next;
    ...


I have seen students stare at the board\screen, perplexed, whenever this is introduced. They are confused by this implementation, because it is "Defining something with itself" (like saying "white is the color of things that are white-hot").

They have difficulty understanding how a class can have a property of itself.
How could I explain to them why this is valid in programming? 

This issue makes it hard for them to understand data structures like List,Queue etc.

Context: they are high-school students learning java, and are familiar with primitive types and a bit of OOP.
The sample is not "defining something with itself." Rather it is defining two different kinds of things.

The first line: public class Node&lt;T&gt; { is beginning the definition of a template for things to be made later. That definition will be handled at compile time. The third line: Node&lt;T&gt; next; sets up an object that will be instantiated using some template. Later in the compile process, when the object is created, Java will look in the table for the template called "Node" that can handle some type. Since, by then, the complete template will exist, there's no problem. The key point here is that next is not a template, it is object that will use the Node&lt;T&gt; template when it is created.

If you also define public class Node2&lt;T&gt; extends Node&lt;T&gt;, then at run time, next could refer to the template Node&lt;T&gt;, or the template Node2&lt;T&gt;. Exactly which it is will be determined when the next object is instantiated.

If it hasn't already been covered, that would be an opportune time to cover early and late binding.