Java - Herencia y propiedades de superclase

 
Vista:

Herencia y propiedades de superclase

Publicado por Jonatan (6 intervenciones) el 27/06/2020 03:01:09
Hola, buenas tardes. Recién estoy comenzando con Java y necesitaría si me pueden señalar mi error en estas declaraciones... solo estoy probando, pero quisiera saber cómo se maneja el tema de la definición de las propiedades en las clases superiores.

En este método en CompanyController, no me reconoce los métodos de los objetos view y model...

1
2
3
4
@Override
    public void update(String label) {
        this.view.txtName.setValue(this.model.getName());
    }

El error que me marca es: can not find symbol.

Les pido ayuda por favor.
Desde ya muchas gracias.

PD: adjunto los archivos de los controladores.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 129
Ha disminuido 1 puesto en Java (en relación al último mes)
Gráfica de Java

Herencia y propiedades de superclase

Publicado por Juan Manuel (53 intervenciones) el 27/06/2020 03:55:37
estas sobreescribiendo un metodo?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Kabuto
Val: 3.428
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Herencia y propiedades de superclase

Publicado por Kabuto (1381 intervenciones) el 27/06/2020 11:55:08
No se ha adjuntado nada así que no podemos ver el código.

De todos modos, intuyo que view(vista) y model(modelo) son dos clases que se supone serán atributos de la clase(¿quizás sea controller?) donde estás escribiendo ese método update().

Si el compilador dice que no los encuentra, es que no está declarados como atributos, o está de forma errónea.

Es decir, para poder acceder a ellos con this, tal y como lo estás poniendo, esa clase debería tenerlos declarados de forma similar a esta.

1
2
3
4
5
6
7
8
9
10
11
12
13
public class CompanyController{
 
    //Atributos
    private View view;
    private Model model;
 
    //Métodos
    @Override
    public void update(String label) {
        this.view.txtName.setValue(this.model.getName());
    }
 
}


Ahora bien, es posible que en tu caso CompanyController, esté heredando de otra clase supongamos Controller y sea esta quien tenga declarados la vista y el modelo como atributos.
Si quieres acceder a ellos a través de herencia, tendrás que usar la palabra super en lugar de this

1
2
3
4
5
6
7
8
9
public class CompanyController extends Controller{
 
    //Métodos
    @Override
    public void update(String label) {
        super.view.txtName.setValue(super.model.getName());
    }
 
}

Es decir, la palabra this hace referencia a "esta" clase.
La palabra super hace referencia a la clase "madre" o superior

Por cierto, la supuesta clase madre Controller, tendrá que tener los atributos view y model declarados como public o protected.

Si están como private, creo que no se podrá acceder directamente usando super.view y super.model.
Habría que usar métodos publicos como getView() y getModel(), pero sería más cómodo y lógico cambiar la visibilidad de los atributos a protected

En realidad no se si este tu problema porque no hemos podido ver el código completo. Si no es esto lo que ocurre, intenta compartir de nuevo el código completo para hacernos una idea mejor de lo que necesitas.

Un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Herencia y propiedades de superclase

Publicado por Jonatan (6 intervenciones) el 27/06/2020 20:41:08
Muchas gracias por sus respuestas.
Probé con "super" y no funcionó...
Mi intención con esto es probar hacer una clase llamada compañía que modifique su propiedad "name" desde una interfaz haciendo uso de los patrones "observer" y "MVC" pero me tira siempre el mismo error.

Adjunto el código completo de todo lo que son los controladores.

ObserverPattern :
1
2
3
4
5
6
7
8
package scheduler.controllers;
 
public class ObserverPattern {
 
    public void update(String label){
        throw new UnsupportedOperationException("Aún no soportado.");
    }
}

Controller:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
package scheduler.controllers;
 
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import scheduler.models.Model;
 
/**
 *
 * @author Jonatan
 */
abstract class Controller extends ObserverPattern implements ActionListener{
 
    protected Model model;
    protected Container view;
 
    public void Controller(Model model, Container view){
        this.model = model;
        this.view = view;
        this.initialize();
    }
 
    public void initialize(){}
 
    @Override
    abstract public void actionPerformed(ActionEvent e);
    abstract public void show();
 
}

CompanyController:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
package scheduler.controllers;
 
import java.awt.event.ActionEvent;
import scheduler.models.Company;
import scheduler.views.CreateCompanyView;
 
/**
 *
 * @author Jonatan
 */
public class CompanyController extends Controller {
 
    public void CompanyController(Company model, CreateCompanyView view){
        this.model = model;
        this.view = view;
        this.model.addObserver(this);
    }
 
    @Override
    public void actionPerformed(ActionEvent e) {
 
    }
 
    @Override
    public void update(String label) {
        this.view.txtName.setValue(this.model.getName());
    }
 
    @Override
    public void show() {
        this.view.show();
    }
 
}

Esto sería todo lo que son los modelos:
ObservablePattern:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
package scheduler.models;
 
import java.util.ArrayList;
import scheduler.controllers.ObserverPattern;
 
 
 
/**
 *
 * @author Jonatan
 */
 class ObservablePattern{
 
    private ArrayList<ObserverPattern> observers;
 
 
    public void addObserver(ObserverPattern observer) {
        this.observers.add(observer);
    }
 
 
    public void removeObserver(ObserverPattern observer) {
        this.observers.remove(observer);
    }
 
    private void update(String label){
        this.observers.forEach((observer) -> {
            observer.update(label);
        });
    }
 
}

Model:
1
2
3
4
5
6
7
8
9
package scheduler.models;
 
/**
 *
 * @author Jonatan
 */
public class Model extends ObservablePattern{
    /*Por ahora no hace nada distinto*/
}

Company:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
package scheduler.models;
 
/**
 *
 * @author Jonatan
 */
public class Company extends Model{
    private String name;
 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
}

CreateCompanyView: Esto lo creó automáticamente NetBeans cuando hice el formulario:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
package scheduler.views;
 
/**
 *
 * @author Jonatan
 */
public class CreateCompanyView extends javax.swing.JFrame {
 
    /**
     * Creates new form CreateCompanyView
     */
    public CreateCompanyView() {
        initComponents();
    }
 
    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">
    private void initComponents() {
 
        jLabel1 = new javax.swing.JLabel();
        txtName = new javax.swing.JTextField();
        btnConfirm = new javax.swing.JButton();
        btnCancel = new javax.swing.JButton();
 
        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
 
        jLabel1.setText("Ingrese el nombre de la empresa.");
 
        txtName.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                txtNameActionPerformed(evt);
            }
        });
 
        btnConfirm.setText("Aceptar");
        btnConfirm.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnConfirmActionPerformed(evt);
            }
        });
 
        btnCancel.setText("Cancelar");
        btnCancel.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnCancelActionPerformed(evt);
            }
        });
 
        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(btnConfirm, javax.swing.GroupLayout.PREFERRED_SIZE, 125, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 94, Short.MAX_VALUE)
                        .addComponent(btnCancel, javax.swing.GroupLayout.PREFERRED_SIZE, 125, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addComponent(txtName)
                    .addComponent(jLabel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap(42, Short.MAX_VALUE)
                .addComponent(jLabel1)
                .addGap(18, 18, 18)
                .addComponent(txtName, javax.swing.GroupLayout.PREFERRED_SIZE, 56, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(18, 18, 18)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(btnCancel, javax.swing.GroupLayout.PREFERRED_SIZE, 61, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(btnConfirm, javax.swing.GroupLayout.PREFERRED_SIZE, 61, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addContainerGap())
        );
 
        txtName.getAccessibleContext().setAccessibleName("");
 
        pack();
    }// </editor-fold>
 
    private void txtNameActionPerformed(java.awt.event.ActionEvent evt) {
        // TODO add your handling code here:
    }
 
    private void btnCancelActionPerformed(java.awt.event.ActionEvent evt) {
        this.show(false);
    }
 
    private void btnConfirmActionPerformed(java.awt.event.ActionEvent evt) {
        // TODO add your handling code here:
    }
 
    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        /* Set the Nimbus look and feel */
        //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
        /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
         * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
         */
        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {
            java.util.logging.Logger.getLogger(CreateCompanyView.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(CreateCompanyView.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(CreateCompanyView.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(CreateCompanyView.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
        //</editor-fold>
 
        /* Create and display the form */
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new CreateCompanyView().setVisible(true);
            }
        });
    }
 
    // Variables declaration - do not modify
    public javax.swing.JButton btnCancel;
    public javax.swing.JButton btnConfirm;
    private javax.swing.JLabel jLabel1;
    public javax.swing.JTextField txtName;
    // End of variables declaration  
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Kabuto
Val: 3.428
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Herencia y propiedades de superclase

Publicado por Kabuto (1381 intervenciones) el 28/06/2020 01:06:23
Pero, ¿por qué estas clases no tienen constructores?
A ver, esta parte del código:

1
2
3
4
5
6
7
8
9
10
abstract class Controller extends ObserverPattern implements ActionListener{
 
    protected Model model;
    protected Container view;
 
    public void Controller(Model model, Container view){
        this.model = model;
        this.view = view;
        this.initialize();
    }

Si le ponemos la palabra void a Controller(), el compilador no lo considera un constructor, si no un método cualquiera.
Hay que quitarle void para transformarlo en un constructor.
Que a lo mejor no queremos que esta clase tenga constructor... pero me parecería rarísimo.

1
2
3
4
5
6
7
8
9
10
abstract class Controller extends ObserverPattern implements ActionListener{
 
    protected Model model;
    protected Container view;
 
    public Controller(Model model, Container view){ //Quitamos palabra void para que sea un constructor
        this.model = model;
        this.view = view;
        this.initialize();
    }

Lo mismo pasa con la clase CompanyController, no tiene constructor, a causa de la palabra void
1
2
3
4
5
6
7
public class CompanyController extends Controller {
 
    public void CompanyController(Company model, CreateCompanyView view){
        this.model = model;
        this.view = view;
        this.model.addObserver(this);
    }

Quitamos void para funcione como constructor.
1
2
3
4
5
6
7
public class CompanyController extends Controller {
 
    public CompanyController(Company model, CreateCompanyView view){
        this.model = model;
        this.view = view;
        this.model.addObserver(this);
    }

Y además, lo normal sería usar la instrucción super() para transferir a la clase superior los objetos model y view.

1
2
3
4
5
6
public class CompanyController extends Controller {
 
    public CompanyController(Company model, CreateCompanyView view){
        super(model, view);
        super.model.addObserver(this);
    }


Pruébalo así.
Repito que quizás la intención es que estas clases no tengan constructores, pero es que sería extrañísimo y nada útil.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Herencia y propiedades de superclase

Publicado por Jonatan (1 intervención) el 28/06/2020 01:25:16
Gracias, no sabía el detalle del void para los constructores. Puede que sea ese el problema. Lo pruebo y come to como me fue con eso.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Herencia y propiedades de superclase

Publicado por Jonatan (6 intervenciones) el 28/06/2020 03:15:43
Hola nuevamente... y gracias Kabuto por tu respuesta.
Lo que me señalaste hace un rato me ayudó, pero no terminó de resolver mí problema. Creo que lo encontré, pero no sé cuál es la lógica correcta para resolverlo de manera prolija.

La primera parte de la clase Controller es así:
1
2
3
4
5
6
7
8
9
abstract class Controller extends ObserverPattern implements ActionListener{
 
    protected Model model;
    protected JPanel view;     /*  <-- Declarada como JPanel*/
 
    public Controller(Model model, JPanel view){
        this.model = model;
        this.view = view;
    }

La primera parte de la clase CompanyController es así:
1
2
3
4
5
6
public class CompanyController extends Controller {
 
    public CompanyController(Company model, CreateCompanyView view){     /*   <-- declarada como CreateCompanyView */
        super(model, view);
        super.model.addObserver(this);
    }

Cómo se corregiría... probé convertirla modificando el código a través de:
1
(JPanel) view
ó de
1
(CreateCompanyView) view
y no hubo caso.

Probé también cambiado así:
1
2
3
4
5
6
public class CompanyController extends Controller {
 
    public CompanyController(Company model, JPanel view){   /* Parámetro como JPanel*/
        super(model, view);
        super.model.addObserver(this);
    }
Pero luego me muestra otro error en este método dentro de la misma clase CreateCompanyView:
1
2
3
4
public void update(String label) {
        CreateCompanyView v = (CreateCompanyView) super.view;
        v.txtName.setValue(this.model.getName());
    }

Me dice que los tipos son incompatibles, ya que no se puede convertir JPanel a CreateCompanyView.
Entiendo que no son compatibles, pero no entiendo cómo se resuelve siendo que quiero conservar la clase "Controller" como la superclase de todos los controladores de mi aplicación futura.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Kabuto
Val: 3.428
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Herencia y propiedades de superclase

Publicado por Kabuto (1381 intervenciones) el 28/06/2020 13:36:13
Humm... a ver.

CreateCompanyView es una clase que hereda de JFrame, es decir, que en realidad es un JFrame.

En la clase Controller, has puesto su atributo view sea un JPanel, por eso te lo rechaza.

Sin embargo, en los posts anteriores, la clase Controller estaba escrita para que view fuese un objeto Container, y no un JPanel

1
2
3
4
5
6
7
8
9
10
abstract class Controller extends ObserverPattern implements ActionListener{
 
    protected Model model;
    protected Container view;
 
    public Controller(Model model, Container view){
        this.model = model;
        this.view = view;
        this.initialize();
    }

Los JFrame heredan de Container, así que si vuelves a poner el atributo view como Container, gracias al polimorfismo (aunque para este caso concreto tengo algunas dudas) debería aceptarte la referencia del objeto CreateCompanyView, que en ya hemos dicho que en realidad es un JFrame (que hereda de Container)

Es decir, Controller quedaría así:
1
2
3
4
5
6
7
8
9
abstract class Controller extends ObserverPattern implements ActionListener{
 
    protected Model model;
    protected Container view;     /*  <-- Declarada como Container*/
 
    public Controller(Model model, Container view){
        this.model = model;
        this.view = view;
    }


Y CompanyController no cambiaría, porque en principio ya es aceptable el CreateCompanyView:

1
2
3
4
5
6
public class CompanyController extends Controller {
 
    public CompanyController(Company model, CreateCompanyView view){     /*   <-- declarada como CreateCompanyView */
        super(model, view);
        super.model.addObserver(this);
    }

Si también fallase, ya que como dije tengo algunas dudas, puedes probar a invocar el método getContentPane() de la clase JFrame. Este método devuelve el objeto Container que tiene internamente el JFrame.
Así, a la clase superior Controller le estaríamos pasando directamente el Container que integra el CreateCompanyView:

1
2
3
4
5
6
public class CompanyController extends Controller {
 
    public CompanyController(Company model, CreateCompanyView view){     /*   <-- declarada como CreateCompanyView */
        super(model, view.getContentPane());
        super.model.addObserver(this);
    }

A ver si hay suerte y vamos encauzando esto poco a poco je je.
Un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

Herencia y propiedades de superclase

Publicado por Jonatan (6 intervenciones) el 28/06/2020 17:13:53
Muchas gracias, lo pruebo y te aviso.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Herencia y propiedades de superclase

Publicado por Jonatan (6 intervenciones) el 29/06/2020 00:44:00
Bueno, probé lo que me dijiste... y funcionó.
No se por qué tuve que declarar view como Container y no como JPanel, siendo que CreateCompanyView es una sublase de la anteriormente mencionada.
Por otro lado, lo que tuve que hacer para poder usar las propiedades "view" y "model" heredadas de Controller en CompanyController, fue castear los tipos de datos devueltos de esta manera en el método update:
1
2
3
4
5
6
7
8
9
10
11
12
13
public class CompanyController extends Controller {
 
    public CompanyController(Company model, CreateCompanyView view){
        super(model, view);
        super.model.addObserver(this);
        this.update("");
    }
 
   public void update(String label) {
        CreateCompanyView v = (CreateCompanyView) super.view; // <-- casteo
        Company c = (Company) super.model; // <-- casteo
        v.txtName.setText(c.getName());
    }

Si bien no me gusta mucho que tenga que castear cada propiedad de la superclase que se vaya a usar, creo que podría crear los getters y setters de las propiedades con el casteo dentro. Si se te ocurre alguna manera de evitarlo, por favor te pido que me lo comentes, sino, no hay problema. Me ayudaste demasiado y le pusiste la mejor onda.

Te lo agradezco.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Rodrigo
Val: 2.041
Plata
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Herencia y propiedades de superclase

Publicado por Rodrigo (623 intervenciones) el 29/06/2020 05:29:45
El metodo update esta ignorando completamente el parametro label.
No deberias usarlo para algo?
Si no lo requieres usar, entonces tal vez toda la operacion de update se puede realizar en el constructor y ahorrarse los casteos en update. Update podria hacer nada y seria el mismo resultado.

Por otro lado, si los campos son protected, (como view y model) no necesitas usar super.
Puedes usar directamente el nombre del campo.

Osea codigo como
1
super.campo
es completamente reemplazable por
1
campo
.

Para el caso especifico del codigo tuyo, seria super.view y super.model reemplazables por view y model respectivamente
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Kabuto
Val: 3.428
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Herencia y propiedades de superclase

Publicado por Kabuto (1381 intervenciones) el 29/06/2020 19:25:43
Creo que puedes ahorrarte los castings modificando la clase Controller.
Ahora mismo Controller espera recibir un objeto Model y un Container, o bien objetos de clases que sean hijas de estas dos superclases.

1
2
3
4
5
6
7
8
9
abstract class Controller extends ObserverPattern implements ActionListener{
 
    protected Model model;
    protected Container view;
 
    public Controller(Model model, Container view){
        this.model = model;
        this.view = view;
    }

Escrita así, tienes una clase un poco más genérica, que puede servirte para usar en otros programas distintos, que usen clases propias y que hereden de Container y de Model.

Pero puedes hacerla menos genérica haciendo que los atributos no sean de las superclases, sino directamente de los tipos para este programa en concreto.
Y eso te ahorraría los castings

1
2
3
4
5
6
7
8
9
abstract class Controller extends ObserverPattern implements ActionListener{
 
    protected Company model; //Company es hija de Model
    protected CreateCompanyView view; //CreateCompanyView es hija de Container
 
    public Controller(Company model, CreateCompanyView view){
        this.model = model;
        this.view = view;
    }

No creo que esto luego suponga otros problemas por otro lado, aunque nunca se sabe.
Pruébalo y a ver que pasa.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Herencia y propiedades de superclase

Publicado por Jonatan (6 intervenciones) el 29/06/2020 23:27:44
Creo que voy a conservar la clase más genérica, porque pienso crear algunas clases que hereden de ella.
Solo tengo que crear getters y setters con los casting y ya no tengo más problema.
Te agradezco mucho tu ayuda, me ha servido mucho.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar