Estou com um problema estranho :) ...
Tenho uma classe abstrata assim:public abstract class AbstractTeste {
protected String nome = "";
protected void usandoNome() {
//aqui eu uso a variavel nome
}
}
porque?
Estou com um problema estranho :) ...
Tenho uma classe abstrata assim:public abstract class AbstractTeste {
protected String nome = "";
protected void usandoNome() {
//aqui eu uso a variavel nome
}
}
porque?
pq nao da pra sobrescrever variaveis - se vc pensar bem, nao faz mto sentido… 
ops … :oops:
Na verdade faz sentido … como neste caso, eu nao correria o risco de ter um erro caso o caboclo esqueca de colocar a variavel na classe dele (q esta herdando a minha abstrata) …
Smota,uma classe abstrata é utilizada p/q outras classes possam herdar
uma interface ou/e a implementação de seus respectivos métodos.
Pq vc iria querer herdar essa variável?Se ela é vital ao seu programa,e sofrerá transformações durante um longo processamento,cria uma variável static numa classe pública e manda bala.Só dará erro na classe
q herda de abstract se vc esquecer de implementar os métodos abstract
da superclasse. Os demais dados e métodos são sujeitos a regras normais de herança! 
Um bom modelo para esses tipos de problemas e esse…
public abstract class Model {
private double x;
private double y;
public Model(double x, double y) {
setX(x);
setY(y);
}
public void setX(double x) {
this.x = validate(x);
}
public void setY(double y) {
this.y = validate(y);
}
public double getX() {
return x;
}
public double getY() {
return y;
}
public abstract void draw();
public abstract void move(double x, double y);
public abstract void paint();
public abstract double calcArea();
private final int validate (double value) {
if ( value < 0 ) {
return 0;
} else {
return value;
}
}
}
public class Circle extends Model {
private double ray;
public Circle (double x, double y, double ray) {
super( x, y );
setRay( ray );
}
public void setRay(double ray) {
this.ray = validateRay( ray );
}
public double getRay() {
return ray;
}
public void draw() {
// draw the circle
}
public void move(double x, double y) {
// move the circle
}
public void paint() {
// paint the circle
}
public double calcArea() {
// calculate the circle area
return 0;
}
private int validateRay(double ray) {
if ( ray <= 0 ) {
return 1;
} else {
return ray;
}
}
}
public class Rectangle extends Model {
public Rectangle (double x, double y) {
super( x, y );
}
public void draw() {
// draw the Rectangle
}
public void move(double x, double y) {
// move the Rectangle
}
public void paint() {
// paint the Rectangle
}
public double calcArea() {
// calculate the Rectangle area
return 0;
}
}
public class Painter extends Model {
private Model[] components;
private int counter;
public Painter(int number) {
components[] = new Model[number];
counter = 0;
}
public void add(Model model) {
if ( count < components.length ) {
components[count++] = model;
}
}
public void draw() {
// draw all models
}
public void move(double x, double y) {
// move all models
}
public void paint() {
// paint all models
}
public double calcArea() {
// calculate all models area
return 0;
}
}
Usamos classes abtratas para criar “uma idéia” abstrata… E a patir dessa idéia abstrata, criar coisas concretas com comportamento bem definido…
Entretanto, o encapsulamento dos atributos de dados deve ser mantido… evitando mal manuseio de atributos de objetos e garantindo a execucao das regras de negocio…
Geralmente usamos o CompositePattern[GoF]…
Bom estudo.
Oba, essa ai foi boa
, obrigado!
Eu sei que não tem muito a ver com o assunto do post mas vou colocar minha dúvida de novo.
Ainda não entendi o porque de uma pessoa querer utilizar um objeto de superclasse em uma referência de subclasse, alguém poderia me responder isso ?
Obrigado.
Hummm …por cima.
Eu crio uma classe abstrata que irá fazer um monte de funções comuns a diversas outras classes que eu vou herdar. Nessa herança é claro que vou usar objetos da superclasse.
No meu caso eu tenho vários DAOs que usam uma API muito muito chata de um programa chamado Action Request System (ARS pros intimos) da Remedy … como todos eles acabam precisando fazer varias coisas iguais eu criei uma superclasse com essas funcoes e os objetos que sei que meus DAOs vao usar.
Tornei ela abstrata pq nao quero que ninguem instancie a danada direta.