7
votes

Comment utiliser une variable d'une classe, dans une autre en Java?

Je travaille juste à travers quelques choses comme une pratique pour un examen que j'ai monté, mais une chose que je ne peux pas avoir la tête ronde, utilise une variable qui appartient à une classe, dans une classe différente.

J'ai une classe de cours et une classe d'étudiants. Cours de classe stocke tous les cours et ce que je veux simplement pouvoir faire est d'utiliser le nom du cours, en classe étudiante.

voici ma classe de cours: xxx

et ici est étudiant: xxx

suis-je Corrigez-vous en utilisant ' s'étend ' dans le cours? Ou est-ce inutile?

Dans mon constructeur pour l'étudiant, j'essaie d'assigner "CoursetTle" du cours de classe, à la variable "étudiante". Mais je ne peux tout simplement pas comprendre comment faire ça!

Merci d'avance pour votre aide, j'ai hâte d'avoir de vos nouvelles!

Merci!


0 commentaires

12 Réponses :


4
votes

Je suppose qu'un cours n'est pas un étudiant, alors héritage entre ces classes est probablement une mauvaise idée.


0 commentaires

4
votes

Vous devez les déclarer public.

Un meilleur moyen est de les garder privés et de coder un getteur public pour cette variable. Par exemple: xxx


0 commentaires

2
votes

cours ne doit pas étendre étudiant . Si vous souhaitez accéder au champ CoursetTitle du cours , vous devez transmettre une référence à un objet Course objet à l'étudiant et ensuite faire cours.coursetter.


0 commentaires

2
votes

Vous ne pouvez pas accéder aux attributs privés d'une classe d'une autre, c'est l'un des principes principaux de l'encapsulation de OOP: l'encapsulation. Vous devez fournir une méthode d'accès à cet attribut, vous souhaitez publier en dehors de la classe. L'approche commune est Setter / Getters - getters uniquement, si vous souhaitez avoir votre classe immuable. Regardez ici: http://fr.wikipedia.org/wiki/mutator_methodod#java_example < / p>


0 commentaires

12
votes

suis-je correct en utilisant "s'étend" dans le cours? Ou est-ce inutile?

Malheureusement pas, si vous voulez savoir si votre héritage est correct ou non, remplacer s'étend avec est-a . Un cours est un étudiant? La réponse est non. Ce qui signifie que votre Course ne doit pas étendre étudiant

un étudiant peut assister à un cours , d'où l'étudiant < / Code> La classe peut avoir une variable de membre de type cours . Vous pouvez définir une liste de cours si votre modèle spécifie que (un étudiant peut assister à plusieurs cours).

Voici un code d'exemple: xxx

maintenant, vous pouvez avoir les suivants: xxx


0 commentaires

2
votes

Il n'a pas de sens d'étendre des cours arbitraires. L'étudiant n'est pas un cours ni vice versa, vous ne pouvez donc pas les étendre comme ça.

Ce que vous devez faire est: p>

Créer un cours d'abord: P>

       aStudent.setCourse(aCourse.title);


0 commentaires

2
votes

étendue étudiant avec Couse car ils ne sont pas du même genre. Extension d'une classe avec une autre survolée lors de la spécialisation d'un plus général (dans un sens).
La solution serait de passer CoursetTitle comme argument du Student Constructeur


0 commentaires

2
votes

Il devrait y avoir 3 objets distincts ici, un cours, un étudiant et une inscription. Une inscription relie un élève à un cours, un cours comporte de nombreux étudiants et un étudiant peut s'inscrire à de nombreux cours. Aucun d'entre eux ne devrait s'étendre.


2 commentaires

Je ne pense pas que vous avez besoin d'une couche supplémentaire des nombreux à de nombreuses tâches de mappage (objet d'inscription) pour cette affaire. (Sauf si cela doit être persisté dans une base de données traditionnelle)


@John: Oui, mais depuis que l'OP a apparemment été exposé à une sorte d'horrible exemples d'une mauvaise utilisation de OO, je préfère montrer une alternative plus approfondie pour la modélisation.



2
votes

Peut-être que vous n'avez pas besoin d'ajouter le nom du cours à l'étudiant. Ce que je ferais, c'est ajouter des étudiants à une source de données en cours. Ceci est plus propre et réduit le couplage entre le cours et l'élève. Cela vous permettrait également d'avoir des étudiants dans plus d'un cours. Par exemple: xxx

}


0 commentaires

2
votes

Tout d'abord,

Vous étendez la classe d'étudiants en classe de cours, ce qui signifie que la classe d'étudiants obtient toutes les propriétés de la classe Coruse. Donc, la classe d'étudiants n'a pas la propriété CoursetTle. P>

Deuxièmement, oui, il est unsysessy - vous devez procéder comme suit: p> xxx pré>

L'utilisation serait quelque chose comme ceci: p> xxx pré>

et ensuite, obtenez les informations de cours dont vous avez besoin de l'étudiant via, c'est-à-dire: p>

student.studentCourse.courseTitle;


0 commentaires

1
votes

Comme mentionné, restez à l'écart de la "prolongation" pour cela. En général, vous ne devriez pas l'utiliser à moins que la relation "IS-A" n'a de sens.

Vous devriez probablement fournir des getters pour les méthodes de la classe du cours: p> xxx pré>

Ensuite, si la classe d'étudiants a besoin de cela, il serait en quelque sorte reprendre le cours (qui est à vous dans votre conception) et appelez le getter: p>

public class Student {
   private Set<Course> courses = new HashSet<Course>();

   public void attendCourse(Course course) {
       courses.add(course);
   }

   public void printCourses(PrintStream stream) {
       for (Course course : courses) {
           stream.println(course.getTitle());
       }
   }
}


0 commentaires

1
votes

ci-dessous, découvrez la solution de votre problème et si vous souhaitez vérifier le code ci-dessous sur votre machine, créez un fichier nommé test.java et coller les codes ci-dessous:

package COM; P>

class Course
{
    private Award courseAward;
    private String courseCode;
    public String courseTitle;
    private String courseLeader;
    private int courseDuration;
    private boolean courseSandwich;


    public Course(String code, String title, Award award, String leader, int duration, boolean sandwich)
    {
        courseAward = award;
        courseCode = code;
        courseTitle = title;
        courseLeader = leader;
        courseDuration = duration;
        courseSandwich = sandwich;

    }

    public Award getCourseAward() {
        return courseAward;
    }

    public void setCourseAward(Award courseAward) {
        this.courseAward = courseAward;
    }

    public String getCourseCode() {
        return courseCode;
    }

    public void setCourseCode(String courseCode) {
        this.courseCode = courseCode;
    }

    public String getCourseTitle() {
        return courseTitle;
    }

    public void setCourseTitle(String courseTitle) {
        this.courseTitle = courseTitle;
    }

    public String getCourseLeader() {
        return courseLeader;
    }

    public void setCourseLeader(String courseLeader) {
        this.courseLeader = courseLeader;
    }

    public int getCourseDuration() {
        return courseDuration;
    }

    public void setCourseDuration(int courseDuration) {
        this.courseDuration = courseDuration;
    }

    public boolean isCourseSandwich() {
        return courseSandwich;
    }

    public void setCourseSandwich(boolean courseSandwich) {
        this.courseSandwich = courseSandwich;
    }
}

class Student 
{
    private int studentNumber;
    private String studentName;
    private int studentPhone;
    private Course studentCourse;
    /**
     * Constructor for objects of class Student
     */
    public Student(int number, String name, int phone, Course course)
    {
        studentNumber = number;
        studentName = name;
        studentPhone = phone;
        studentCourse = course;
    }

    public int getStudentNumber() {
        return studentNumber;
    }
    public void setStudentNumber(int studentNumber) {
        this.studentNumber = studentNumber;
    }
    public String getStudentName() {
        return studentName;
    }
    public void setStudentName(String studentName) {
        this.studentName = studentName;
    }
    public int getStudentPhone() {
        return studentPhone;
    }
    public void setStudentPhone(int studentPhone) {
        this.studentPhone = studentPhone;
    }
    public Course getStudentCourse() {
        return studentCourse;
    }
    public void setStudentCourse(Course studentCourse) {
        this.studentCourse = studentCourse;
    }
}

class Award{
    private long awardId;
    private String awardName;

    Award(long awardId, String awardName){
        this.awardId = awardId;
        this.awardName = awardName;
    }

    public long getAwardId() {
        return awardId;
    }

    public void setAwardId(long awardId) {
        this.awardId = awardId;
    }

    public String getAwardName() {
        return awardName;
    }

    public void setAwardName(String awardName) {
        this.awardName = awardName;
    }
}

public class Test{
    public static void main(String ar[]){

        // use your all classes here


    }
}


0 commentaires