Duvida Exception X RuntimeException

Uma duvida na linha abaixo l.nome
não compila porque ???


public abstract class TestAbstract {

	public String nome = "p";
	abstract void addNome();
	
	public void viewNome(){
		System.out.println("ver Nome");
	}
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub

	}

}

//

public class LeAbstract extends TestAbstract {

	@Override
	void addNome() {
		// TODO Auto-generated method stub
        System.out.println("Soma Nome");
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		LeAbstract l = new LeAbstract();
		l.addNome();
		l.viewNome();
		System.out.println(l.nome);
		l.nome;
	}
}

não entendi os codigos abaixo porque com Exception
não compila e com RuntimeException compila.
O Exception não é super classe do exception
abaixo Throwable ???


class DuvS{
public static void main(String args[]){
aviao b = new boing();
b.gol();
}}
class aviao{
static void gol(){
System.out.println("gol");}
}
class boing extends aviao{
static void gol() throws Exception{}
}
----
class DuvS{
public static void main(String args[]){
aviao b = new boing();
b.gol();
}}
class aviao{
static void gol(){
System.out.println("gol");}
}
class boing extends aviao{
static void gol() throws RuntimeException{}
}
class DuvS{
public static void main(String args[]){
aviao b = new boing();
b.gol();
}}

mais uma duvida
ao chamar
TV t1 = new Us();
t1.setMs(t1);
porque trouxe a saida TV e não do US ???

class TV{
public void setMs(TV t){System.out.println("TV");}
}
class Us extends TV{
//realizando sobrecarga
public void setMs(Us u){System.out.println("usuario tv sobrecarregado");}
}
class LojaTv{
public static void main(String args[]){
TV t = new TV();
t.setMs(t);
TV t1 = new Us();
t1.setMs(t1);
}}

não entendi a linha abaixo
Capital c1 =(Capital) c;

quando fez o cast para Capital não imprimiu o metodo
Capital e sim Salvador ???


class Capital {
	public void setName(){System.out.println("Capital");}
}


public class Salvador extends Capital{
	public void setName(){System.out.println("Capital Salvador");}
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Capital c = new Salvador();
		c.setName();
		
		Capital c1 =(Capital) c;
		
		c1.setName();
		
		Capital c2 = c; 
		c2.setName();
		Capital c3 = new Capital();
		c3.setName();
	}

}