Gente, estou com duas dúvidas.
Supondo que eu tenho duas classes :
[code]
public class classe1
{
public classe1(String name,int age)
{
String Name = name;
int Age = age;
}
}
//
public class classe2 extends classe1
{
public classe2(String Name,int Age)
{
super(Name,Age);
}
}[/code]
O que ocorre com essas variáveis na classe2… elas pegam o mesmo valor da classe1 ou criam uma nova variavel chamada Name e outra Age, porém referenciada na classe 2?
Estou testando aqui no netbeans, mas gostaria de uma orientação teórica… vi algumas apostilas mas elas não me deixaram claro isso…
Valeu pela ajuda ~~
Aguardo resposta ~~~
André 
Gente , estou com uma dúvida … por que quando eu chamo o super da classe2, ele não muda as variaveis da classe1 ?
[code]public class MainClass {
public static void main (String args[])
{
classe2 cl2 = new classe2("João",25);
classe1 cl1 = new classe1("Andre",18);
cl1.Classmethod1();
cl2.methodClass2();
}
}[/code]
[code]public class classe1
{
public static String Name;
private static int Age;
public static void Classmethod1()
{
System.out.println(“Classe1”+" " +Name+ " " + Age);
}
public classe1(String name,int age)
{
Name = name;
Age = age;
}[/code]
[code]public class classe2 extends classe1
{
public static String Name;
private static int Age;
public classe2(String Name2,int Age2)
{
super(Name2,Age2);
Name = Name2;
Age = Age2;
System.out.println("Classe2 a “+” " + Name2 + " " + Age2);
}
public static void methodClass2()
{
System.out.println("Classe2 “+” " + Name + " " + Age);
}
}
[/code]
Ahhh, esquece… acabeid e notar que o erro era por causa disso :
[code]public class MainClass {
public static void main (String args[])
{
classe1 cl1 = new classe1("Andre",18);
classe2 cl2 = new classe2("João",25);
cl1.Classmethod1();
cl2.methodClass2();
}
}[/code]
classe2 cl2 = new classe2(“João”,25);
estava em cima de :
classe1 cl1 = new classe1("Andre",18);
Falta pegar o conceito de herança… quando você diz que Classe2 herda de Classe1 isso não quer dizer que ele vai ter acesso aos atributos do pai dele como uma instância…
isso quer dizer que ele tem os mesmos atributos que o pai, mas são dele… vou tentar explicar com código
[code]public class Classe1{
public int age;
public String name;
}
public class Classe2 extends Classe1{
}
[/code]
a classe 2 extendendo à classe 1, herda os mesmos atributos do pai… agora em nível de instância, se você instanciar um objeto Classe1 e um Classe2, um não vai ter acesso aos atributos do outro.
seria igual se definisse a classe 2 da seguinte maneira:
[code]public class Classe2{
public int age;
public String name;
}[/code]
não sei se expliquei bem, se tiver mais dúvidas vai postando e a gente vai tentando explicar melhor
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.
Agradeço pelas respostas, mas tem uma coisa que eu não entendi…
Eu adicionei uma terceira classe :
[code]public class Classe3 extends classe2{
public Classe3(String Name,int Age)
{
super("aaaa", 100);
String N = Name;
int A = Age;
}
}[/code]
e adicionei no main :
[code]public class MainClass {
public static void main (String args[])
{
classe1 cl1 = new classe1("Andre",18);
classe2 cl2 = new classe2("João",25);
Classe3 cl3 = new Classe3("lol", 19);
cl1.Classmethod1();
cl2.methodClass2();
System.out.println(" " + "\n");
cl3.methodClass2();
cl3.Classmethod1();
}
}[/code]
Só que agora, a resposta está assim :
[quote]run:
Classe2 a João 25
Classe2 a aaaa 100
Classe1 aaaa 100
Classe2 aaaa 100
Classe2 aaaa 100
Classe1 aaaa 100
CONSTRUÍDO COM SUCESSO (tempo total: 0 segundos)[/quote]
Por que ele mudou a classe 1 e 2 ? Só pq não criei uma variável static dentro da classe 3 ?
Bom dia a todos.
Voltando ao mesmo problema anterior.
Na classe 3 você está declarando variáveis dentro do construtor e isto faz com que logo assim que o construtor saia de escopo, as variáveis sejam descartadas de memória, porque elas são locais dentro do construtor, e você não consegue armazenar nada assim, dentro da classe e consequentemente dentro da instância.
Entendeu.