2014-06-19 1 views
1

je une classe comme cemise en Java la super classe étendue de l'un passé dans l'objet

public class User implements UserInterface, Parcelable 
{ 
    public User(int userID, String firstName, String lastName, String mobileNumber, Date dateAccountCreated) 
    { 
     this.userID = userID; 
     this.firstName = firstName; 
     this.lastName = lastName; 
     this.mobileNumber = mobileNumber; 
     this.dateAccountCreated = dateAccountCreated; 
    } 
} 

Et je alors une autre classe qui se prolonge dans celle-ci:

public class Invitee extends User 
{ 
    private int eventDescision; 
    public Invitee(User u, int eventDescision) 
    { 
     super() = u; 
     this.eventDescision = eventDescision; 
    } 
} 

Il est évident que cette ligne super() = u; ne marche pas. Cependant, comment puis-je réaliser cette fonctionnalité où je passe l'objet Utilisateur que l'invité reçoit et le définir comme l'objet étendu sans avoir à créer un autre constructeur? Je sais que je peux juste l'objet en tant que variable avec un getter et setter, cependant, j'aime la façon dont il s'écoule sans faire cela comme invité et est toujours utilisateur.

+0

Êtes-vous d'accord avec une réponse? marquer un comme correct ou clarifier vos doutes dans les commentaires, s'il vous plaît. – logoff

Répondre

3

User vous recevez dans le constructeur Invitee est une véritable instance et vous créez un autre. Vous ne pouvez pas affecter une instance dans un super constructeur, vous ne pouvez la copier qu'avec un constructeur de copie.

1

Il devrait plutôt être:

super(u.getUserID(), 
     u.getFirstName(), 
     u.getLastName(), 
     u.getMobileNumber(), 
     u.getDateAccountCreated()); 
+0

soit, soit ajouter un constructeur qui prend une instance de User, et appeler super (u); – Stultuske

+0

Oui, je suppose qu'il ne veut pas changer sa classe 'User', mais en général vous avez raison. :) –

+0

Je vais le faire ensuite. Je pensais que tu serais capable de faire ce que je veux. Je pense que cela devrait être possible. – bubblebath

0

Vous ne pouvez pas passer automatiquement une instance de la classe de base à l'appel du constructeur de la classe de base (super) dans le constructeur de la classe enfant.

Ce que vous pouvez faire est de passer les propriétés de la classe de base dans l'appel super.

Par exemple est des propriétés de l'utilisateur ne sont pas privés:

public Invitee(User u, int eventDescision) { 
    super(u.userID, u.firstName, u.lastName, u.mobileNumber, u.dateAccountCreated); 
... 
0

Vous pouvez:

  1. Utilisez le design décorateur boniment dans Invitee
  2. Définir costructor utilisateur (User u)
  3. que les gens manthioned before: utilise super() avec tous les paramètres

Rappelez-vous que super appelle un constructeur de superclasse, donc vous ne pouvez pas appeler un constructeur qui n'est pas défini.

Questions connexes