Obrigado @Lucas_Camara pela resposta.
Acredito que o meu está apresentando falhas na hora de inserir de forma correta os dados finais. Essa parte aqui:
Foo f = new Bar();
f.print();
f = new Wee();
f.print();
Como você organizou o código completo? Tem como compartilhar?
Como foi soh para testar, coloquei todas as classes no mesmo arquivo:
public class Main {
public static void main(String[] args) throws Exception {
Foo f = new Bar();
f.print();
f = new Wee();
f.print();
}
public static class Foo {
public void print() {
System.out.println("Foo");
}
}
public static class Bar extends Foo {
public void print() {
System.out.println("Bar");
}
}
public static class Wee extends Bar {
@Override
public void print() {
System.out.println("Wee");
}
}
}
Mas iria funcionar do mesmo jeito se estivessem em arquivos diferentes.
C:\testandojava2\src\Foo.java:3:9
java: illegal start of expression
e o código completo está assim:
public class Foo {
public static void main(String[] args) {
public class Main {
public static void main(String[] args) throws Exception {
Foo f = new Bar();
f.print();
f = new Wee();
f.print();
}
public static class Foo {
public void print() {
System.out.println("Foo");
}
}
public static class Bar extends Foo {
public void print() {
System.out.println("Bar");
}
}
public static class Wee extends Bar {
@Override
public void print() {
System.out.println("Wee");
}
}
}
}
}
e todos os meus public estão sublinhados de vermelho.
Desculpa não saber explicar muito bem e ter quase ZERO de conhecimento. Eu tenho duas semanas que comecei a estudar JAVA. primeiro contato na vida
public class Main {
public static void main(String[] args) throws Exception {
Foo f = new Bar();
f.print();
f = new Wee();
f.print();
}
public class Foo {
public void print() {
System.out.println("Foo");
}
}
public class Bar extends Foo {
public void print() {
System.out.println("Bar");
}
}
public class Wee extends Bar {
@Override
public void print() {
System.out.println("Wee");
}
}
}
Mais os erros me perseguem ainda:
C:\testandojava2\src\Main.java:3:17
java: non-static variable this cannot be referenced from a static context
Mas com toda a certeza, ainda estou fazendo algo errado!
Ah sim. Da forma como fiz (colocando todas as classes no mesmo arquivo), vc tem 2 opções.
Coloca as claases como static ou muda a forma de instanciar essas classes no método main. Para instanciar no método main sem as classes serem static, vc faz assim:
Main main = new Main();
Foo f = main.new Bar();
f.print();
f = main.new Wee();
f.print();
Se vc colocar as classes fora da classe Main (sem elas serem public) ou em arquivos separados, não precisa fazer nada disso e só instanciar normalmente.
Veja como ficaria todas as classes no mesmo arquivo, porém, sem estarem dentro da classe Main:
Arquivo Main.java
public class Main {
public static void main(String[] args) throws Exception {
Foo f = new Bar();
f.print();
f = new Wee();
f.print();
}
}
// dentro do mesmo arquivo só pode ter apenas uma classe pública
class Foo {
public void print() {
System.out.println("Foo");
}
}
class Bar extends Foo {
public void print() {
System.out.println("Bar");
}
}
class Wee extends Bar {
@Override
public void print() {
System.out.println("Wee");
}
}
Qualquer erro pra quem está começando, parece o fim do mundo.
Depois que você vê onde estava o falhando, percebe o abismo de conhecimento que ainda falta adquirir! Muito obrigado mesmo pela ajuda… vou continuar a assistir aulas e praticar!