Bom dia a todos.
O problema está aqui:
public class classe1 {
public classe1(String name,int age)
{
String Name = name;
int Age = age;
}
Ou seja, você declarou as variáveis Name e Age dentro do escopo do construtor. Quando você instancia a classe1, com o seu construtor, as variáveis são alocadas em memória e no mesmo processo recebem o valor do parâmetro passado, entretanto quando o construtor sai de escopo (termina de realizar a operação) todas as variáveis declaradas dentro deles são eliminadas da memória, e ai que há diferença entre variáveis locais (dentro do escopo de métodos) e variáveis de classe, e variáveis globais.
Você teria que encapsulá-las assim:
public class Classe1 {
private String name;
private int age;
public Classe1(String name, int age)
{
this.name = name;
this.age = age;
}
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
public int getAge()
{
return age;
}
public void setAge(int age)
{
this.age = age;
}
}
Já com a classe2 você pode fazer assim:
public class Classe2 extends Classe1 {
public Classe2(String name, int age)
{
setName(name);
setAge(age);
// ou
super(name, age);
}
}
Repare que com encapsulamento das variáveis, você pode acessá-las com os métodos getters e setters, também na herança.
Agora
public class MainClass {
public static void main (String args[])
{
Classe1 cl1 = new Classe1("Andre",18);
System.out.println("Nome: "+ cl1.getNome() + " - Idade: " + cl1.getAge();
Classe2 cl2 = new Classe2("João",25);
System.out.println("Nome: "+ cl2.getNome() + " - Idade: " + cl2.getAge();
}
}
Rode e vê como funciona.