protected = nicht protected?

Schuriko

Bekanntes Mitglied
In meinem Projekt habe ich keine Klasse für Kontakte:
Code:
@Entity
@Table(name = "contacts")
public abstract class Contact {
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        private Long id;
        
        @NotNull
        @CreationTimestamp
        private LocalDateTime created_at;
        
        @NotNull
        @OneToOne(cascade = CascadeType.REMOVE, fetch=FetchType.EAGER)
        @JoinColumn(name="created_by")       
        private Person    created_by;
        
        @UpdateTimestamp
        private LocalDateTime updated_at;
        
        @OneToOne(cascade = CascadeType.REMOVE, fetch=FetchType.EAGER)   
        @JoinColumn(name="updated_by")       
        private Person    updated_by;   
        
        @Enumerated
        @Column(columnDefinition = "smallint")
        private EContactMethod method = EContactMethod.TELEPHON;
        
        @Enumerated
        @Column(columnDefinition = "smallint")   
        private EContactLocation location = EContactLocation.BUSINESS;
        
        @NotBlank
        @Column(length = 255)
        private String content;
        
        @OneToOne(cascade = CascadeType.REMOVE, fetch=FetchType.EAGER)
        @JoinColumn(name="address_id")   
        private Address address;
        
        @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)
        @JoinTable(
                name = "contact_infos",
                joinColumns={ @JoinColumn(name="contact_id", referencedColumnName="id") },
                inverseJoinColumns={ @JoinColumn(name="text_id", referencedColumnName="id", unique=true) }
        )
        private List<Text> infos = new ArrayList<Text>();
        
        public Contact() {
        }

        public Contact(Contact contact) {
            
            this.method = contact.method;
            this.location = contact.location;
            this.content = contact.content;
            this.address = contact.address;
            
            List<String> strings = new ArrayList<>();
            contact.infos.stream().forEach((info) -> {
                this.infos.add(new Text(info));
            });
        }
        
        public Long getId() {
            return id;
        }

        public void setId(Long id) {
            this.id = id;
        }
        
        public LocalDateTime getCreatedAt() {
            return created_at;
        }
        
        public void setCreatedAt(LocalDateTime created_at) {
            this.created_at = created_at;
        }
        
        public Person getCreatedBy() {
            return created_by;
        }
        
        public void setCreatedBy(Person created_by) {
            this.created_by = created_by;
        }
        
        public LocalDateTime getUpdatedAt() {
            return updated_at;
        }
        
        public void setUpdatedAt(LocalDateTime updated_at) {
            this.updated_at = updated_at;
        }
        
        public Person getUpdatedBy() {
            return updated_by;
        }
        
        public void setUpdatedBy(Person updated_by) {
            this.updated_by = updated_by;
        }
        
        public EContactMethod getMethod() {
            return method;
        }
        
        protected void setMethod(EContactMethod method) {
            this.method = method;
        }
            
        public EContactLocation getLocation() {
            return location;
        }
        
        public void setLocation(EContactLocation location) {
            this.location = location;
        }
        
        protected String getContent() {
            return content;
        }
        
        protected void setContent(String content) {
            this.content = content;
        }
        
        protected Address getAddress() {
            return address;
        }
        
        protected void setAddress(Address address) {
            this.address = address;
        }
        
        public List<Text> getInfos() {
            return infos;
        }
        
        public void setInfos(List<Text> infos) {
            this.infos = infos;
        }
        
        @Override
        public String toString() {
            return "Contact [id=" + id + ", created_at=" + created_at + ", created_by=" + created_by + ", updated_at="
                    + updated_at + ", updated_by=" + updated_by + ", method=" + method + ", location=" + location
                    + ", content=" + content + ", address=" + address + ", infos=" + infos + "]";
        }
}
Dieses ist eine Abstrakte Klasse, weil es für jeden EContactMethod (TELEPHON, ADDRESS, EMAIL, INTERNET, ...) wird es eine eigene Klasse geben wird.

Für meine Basisklasse Contact habe ich eine Testklasse
Code:
class ContactTestClass extends Contact {

    public ContactTestClass() {
        super();
    }

    public ContactTestClass(Contact contact) {
        super(contact);
    }
    
}

public class ContactTest {
        private Validator validator;
        
        @Before
        public void setUp() throws Exception {
            ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
            validator = factory.getValidator();
        }

        @Test
        public void testCopyConstructor() {
            EContactMethod methodValue = EContactMethod.TELEPHON;
            EContactLocation locationValue = EContactLocation.BUSINESS;
            String contentValue = "content";
            Address addressValue = new Address();
            String info1Value = "german text";
            String info2Value = "english text";
            String info3Value = "netherlands text";
            
            List<Text> infoValue = new ArrayList<Text>();
            infoValue.add(new Text(new Language(), info1Value));
            infoValue.add(new Text(new Language(), info2Value));
            infoValue.add(new Text(new Language(), info3Value));
            
            ContactTestClass contact = new ContactTestClass();
            contact.setMethod(methodValue);
            contact.setLocation(locationValue);
            contact.setContent(contentValue);
            contact.setAddress(addressValue);
            contact.setInfos(infoValue);
            
            ContactTestClass copied_contact = new ContactTestClass(contact);

            assertEquals(copied_contact.getMethod(), methodValue);
            assertEquals(copied_contact.getLocation(), locationValue);
            assertEquals(copied_contact.getContent(), contentValue);
            assertEquals(copied_contact.getAddress(), addressValue);
            assertEquals(copied_contact.getInfos().size(), 3);
            assertNotEquals(copied_contact.getInfos().get(0), contact.getInfos().get(0));
            assertEquals(copied_contact.getInfos().get(0).getText(), info1Value);
            assertNotEquals(copied_contact.getInfos().get(1), contact.getInfos().get(1));
            assertEquals(copied_contact.getInfos().get(1).getText(), info2Value);
            assertNotEquals(copied_contact.getInfos().get(2), contact.getInfos().get(2));
            assertEquals(copied_contact.getInfos().get(2).getText(), info3Value);
        }
        
        ...
}
Im der Test-Datei befindet sich eine konkrete Klasse ContactTestClass.

Nun hätte ich gedacht das man auf die protected Methode setMethod() von der Test Klasse nicht zugreifen können. Also die Test Funktion hätte nicht funktionieren können, weil es in der ContactTestClass nicht überschrieben wird.

Aber es scheint zu funkionieren. Weis jemand warum?
 

Schuriko

Bekanntes Mitglied
Sind die Klassen zufällig im selben Package?
Nein die eine befindet sich im src/main/com/project/entities also in der Namespace com.project.entities
und die andere im Test verzeichnis src/test/com/project/entities

Auf protected-Variablen und -Methoden kannst Du in abgleiteten Klassen zugreifen (das ist der Unterschied zu private).

Wenn eine Methode nicht überschrieben wird, wird die Methode der Basisklasse verwendet.
Das wäre logisch, wenn es eine abgeleitet Klasse ist. Aber die abgeleitete Klasse heißt ContactTestClass und die Test Klasse
ContactTest. s.o.
 

Schuriko

Bekanntes Mitglied
Ja aber außerhalb eine Klasse sollte man doch eigentlich nicht auf eine protected Methode von einer anderen Klasse aus zugreifen können! Weil sonst könnte ich ja auch im Source - Pfad in der gleich package eine Klasse XYZ erstellen die auf die protected Funktion der obigen Klasse zugreifen und das ist eigentlich nicht Sinn und Zweck von protected.
 

Robat

Top Contributor

mihe7

Top Contributor
Ja aber außerhalb eine Klasse sollte man doch eigentlich nicht auf eine protected Methode von einer anderen Klasse aus zugreifen können!
Das wäre dann private.

Weil sonst könnte ich ja auch im Source - Pfad in der gleich package eine Klasse XYZ erstellen die auf die die protected Funktion der obigen Klasse zugreift und das ist eigentlich nicht Sinn und Zweck von protected.
Über Sinn und Unsinn lässt sich streiten. So lange das System logisch bleibt, kann man definieren was man will. Und Java spezifiziert protected nun einmal so, dass es eine Ordnung bzgl. der Restriktionen der Modifizierer gibt: private, package private, protected, public.

Genauso legitim wäre es, protected in Deinem Sinn zu verstehen. Allerdings wird es dann schwierig, zwischen den Modifizierern eine Ordnung anzugeben, denn die Frage, ob "package private" oder "protected" restriktiver wäre, ließe sich dann nicht mehr einfach beantworten.

Das ist nur meine persönliche Sicht der Dinge.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
H Kapselung protected aber in einer Kindklasse nicht zugänglich Java Basics - Anfänger-Themen 5
P protected funktioniert nicht? Java Basics - Anfänger-Themen 5
K Sichtbarkeit protected: Attribute trotzdem aufrufbar. Java Basics - Anfänger-Themen 4
B Vererbung - Sichtbarkeitsmodifikation - protected Java Basics - Anfänger-Themen 10
S Zugriff auf protected Fields = guter Programmierstil? Java Basics - Anfänger-Themen 11
Aprendiendo Zwei Fragen und ein geerbtes "protected"-Attribut Java Basics - Anfänger-Themen 2
wilmaed protected class Java Basics - Anfänger-Themen 0
K Vererbung protected NUR für Unterklassen? Java Basics - Anfänger-Themen 17
M Schlüsselworte Ohne Modifizierer gleichbedeutend mit protected? Java Basics - Anfänger-Themen 6
K Compiler-Fehler vererbtes protected Java Basics - Anfänger-Themen 41
K Protected und Private Deklaration Java Basics - Anfänger-Themen 8
B Vererbung Probleme bei Zugriff auf protected-Methoden in einer Unterklasse Java Basics - Anfänger-Themen 27
J protected Methoden Java Basics - Anfänger-Themen 8
W Frage public protected konstruktor Java Basics - Anfänger-Themen 6
B Kapselung Klasse private, Konstruktor protected Java Basics - Anfänger-Themen 10
T Kapselung: public-Methoden in protected-Klassen Java Basics - Anfänger-Themen 3
A protected Java Basics - Anfänger-Themen 18
F Ewiges Leid mit "protected" (oder "wie der beste Freund eine hinrücks betrügt") Java Basics - Anfänger-Themen 26
A Frage zu Protected in SubSubKlasse Java Basics - Anfänger-Themen 4
G Protected Variablen außerhalb der eigenen Klassenhierarchie sichtbar Java Basics - Anfänger-Themen 5
N Wann muss eine Methode - protected sein wann public wann. Java Basics - Anfänger-Themen 5
stekoe2000 protected abstrac class Java Basics - Anfänger-Themen 3
B public und protected Java Basics - Anfänger-Themen 11
S Veränderung von Protected Daten durch Übergabe? Java Basics - Anfänger-Themen 3
G Public ,private,protected Java Basics - Anfänger-Themen 1
M Konstruktor protected machen Java Basics - Anfänger-Themen 7
H protected Java Basics - Anfänger-Themen 2
U public, private, protected und "default access" - Java Basics - Anfänger-Themen 14
V Auf protected ArrayList von anderer Klasse zugreifen Java Basics - Anfänger-Themen 4
J protected und Standard Sichtbarkeit Java Basics - Anfänger-Themen 2
M Jede Variable als private, protected etc. deklarieren? Java Basics - Anfänger-Themen 7
A "Hello World"-Programm läuft nicht Java Basics - Anfänger-Themen 16
D Regex greift nicht richtig Java Basics - Anfänger-Themen 4
richis-fragen JTable den angezeigten WERT nicht den Wert aus dem Model ausgeben. Java Basics - Anfänger-Themen 3
richis-fragen JTable Header ausgeblendete (width = 0) nicht per mouseDragged aufziehen. Java Basics - Anfänger-Themen 9
M Ausgabe einer ArrayList ensteht nur als Hashcode, nicht als Objekt Java Basics - Anfänger-Themen 16
K Warum wird mir auf der Konsole des Servers nicht "xxxx" angezeigt (Server/Client) Java Basics - Anfänger-Themen 4
K Warum wird hier nur etwas in eine txt Datei geschrieben und nicht in alle drei (InputStream/OutputStream/Reader/Writer) Java Basics - Anfänger-Themen 1
richis-fragen JTable effektiv angezeigter Text ausgeben nicht Inhalt vom Model Java Basics - Anfänger-Themen 9
S nach Import von jars (PLC4x) in Eclipse kann nicht mehr compiliert werden Java Basics - Anfänger-Themen 9
J Datenüberwachung funktioniert nicht Java Basics - Anfänger-Themen 9
S Wie debugge ich dies am besten: SingleThreadExecutor führt Task nicht aus..? Java Basics - Anfänger-Themen 29
H JDK installieren jdk-21 wird nicht erkannt Java Basics - Anfänger-Themen 13
N Klassen Hintergrundfarbe in JPanel ändert sich nicht Java Basics - Anfänger-Themen 3
K Warum wird mir "Empfangen vom Client:" nicht sofort ausgegeben(Server/Client) Java Basics - Anfänger-Themen 3
mo13 JTextField funktioniert nicht Java Basics - Anfänger-Themen 4
J .jar datei öffnen funktioniert nicht Java Basics - Anfänger-Themen 17
M Methode zielnah zeigt das gewünschte Ausgabe nicht an Java Basics - Anfänger-Themen 3
K Verstehe Rekursion nicht ganz Java Basics - Anfänger-Themen 7
M OOP Brüche nicht richtig berechnen Java Basics - Anfänger-Themen 3
N Ich kriege ganze zeit die Fehlermeldung "Inhalt der Zwischenablage kann nicht in die ausgewählten Elemente eingefügt werden" hat jemand eine Lösung? Java Basics - Anfänger-Themen 6
K TicTacToe belegtes feld nicht neu besetzbar Java Basics - Anfänger-Themen 1
K TicTacToe belegtes Feld nicht neu besetzbar Java Basics - Anfänger-Themen 3
A Warum wird mein jdk nicht gefunden? Java Basics - Anfänger-Themen 3
M Queue-Datenstruktur: nach dem Elementen entfernen, das Ergebnis ist immer noch nicht optimal. Java Basics - Anfänger-Themen 3
K Programm compilierbar aber nicht ausführbar... Java Basics - Anfänger-Themen 21
N Hey Leute und zwar versuche ich gerade ein 2D Spiel zu Programmieren aber die Figur will sich nicht nach links oder rechts bewegen :( Java Basics - Anfänger-Themen 12
G Mit jPackage erstellte EXE funktioniert nicht Java Basics - Anfänger-Themen 2
N BMI Rechner Was haltet ihr von dem Code habt ihr Verbesserungsvorschläge weil design teschnisch ist das nicht das geilste würde das gerne überarbeiten Java Basics - Anfänger-Themen 12
G Robot funktioniert nicht bei SelectionListener Java Basics - Anfänger-Themen 6
D MacOS: PDF erstellen geht nicht Java Basics - Anfänger-Themen 1
G Kann Java-Programm nicht als jar aufrufen, auch als EXE nicht Java Basics - Anfänger-Themen 19
J jar Befehl wird nicht erkannt Java Basics - Anfänger-Themen 7
missy72 Erste Schritte (nicht) Deterministischer endlicher Automat Java Basics - Anfänger-Themen 9
T Getter/Setter - wie sieht ein Setter aus? Und wie nicht? Java Basics - Anfänger-Themen 34
T catch(InputMismatchException) wird nicht ausgefürt/erkannt Java Basics - Anfänger-Themen 12
T Methode akzeptiert String nicht Java Basics - Anfänger-Themen 18
P Netbeans installation geht nicht Java Basics - Anfänger-Themen 26
R RegEx funktioniert nicht Java Basics - Anfänger-Themen 14
T HashMap Lsite gibt die sachen nicht aus wie gewollt. Java Basics - Anfänger-Themen 3
H Counter durch gepresste Taste nur auf 1 erhöhen und nicht durchzählen lassen Java Basics - Anfänger-Themen 7
S 2 Reihen ratio-btn, eine Reihe funktioniert andere nicht Java Basics - Anfänger-Themen 4
T scanner nicht erkannt Java Basics - Anfänger-Themen 3
monsterherz Punkt Notation funktioniert nicht Java Basics - Anfänger-Themen 4
monsterherz Fehler Semikolon fehlt - ich weiss aber nicht wo da noch eines hin sollte... Java Basics - Anfänger-Themen 21
R Java kann nicht installiert werden Java Basics - Anfänger-Themen 8
marcelnedza Finde meinen Fehler in einer Methode nicht, Java Karol Java Basics - Anfänger-Themen 15
monsterherz einfache Methode mit Fehler den ich nicht finde Java Basics - Anfänger-Themen 21
monsterherz if / else if mit Fehler den ich leider nicht finde Java Basics - Anfänger-Themen 11
D Jar Datei startet unter Linux nicht Java Basics - Anfänger-Themen 3
KeinJavaFreak Erste Schritte Programm "Java(TM) Platform SE binary " nicht vorhanden Java Basics - Anfänger-Themen 1
KeinJavaFreak Erste Schritte Java "Executable Jar File" nicht vorhanden Java Basics - Anfänger-Themen 1
M Konstruktor-Aufruf im Konstruktor, aber nicht am Anfang? Java Basics - Anfänger-Themen 4
G Variable aktualisiert sich nicht in rekursiver Methode Java Basics - Anfänger-Themen 4
Darkherobrine9 Import klappt nicht Java Basics - Anfänger-Themen 7
N Programm Funktioniert mit .txt Datei aber nicht mit .rtf Datei Java Basics - Anfänger-Themen 2
R Compiler-Fehler Variable wird nicht gefunden bzw. erkannt? Java Basics - Anfänger-Themen 2
_so_far_away_ Inventarisierungssystem brauche switch Cases und weiß nicht, wie ich e implementieren muss Java Basics - Anfänger-Themen 5
P BeforeEach AfterEach werden nicht ausgeführt. Java / Selenium Java Basics - Anfänger-Themen 4
I Erste Schritte Einfache Datenbank-Webseite erstellen als Nicht-IT-lerin Java Basics - Anfänger-Themen 24
N Interpreter-Fehler Compiler zeigt keine Fehler an, aber das Programm läuft nicht (BlueJ) Java Basics - Anfänger-Themen 2
D Quellcode für cmd funktioniert nicht Java Basics - Anfänger-Themen 9
C Kann mir jemand sagen warum ich nicht mal rechnen kann ? Java Basics - Anfänger-Themen 32
K Java Lotto Spiel; ich komme nicht weiter Java Basics - Anfänger-Themen 15
A JavaFX-Anwendung läuft nicht mit Selenium WebDriver Java Basics - Anfänger-Themen 0
T Meine Klasse wird nicht gefunden Java Basics - Anfänger-Themen 1
T Wie kann man es machen das ein Objekt nicht übermalt wird Java Basics - Anfänger-Themen 2
H Cast von Float nach String klappt nicht Java Basics - Anfänger-Themen 12
heinrich172 Methoden Trotz gleichem Element stimmt Vergleich nicht? Java Basics - Anfänger-Themen 7
I Entity Objekt nicht gefunden -> Webhook empfangen in der gleichen Methode (Transaktion) Java Basics - Anfänger-Themen 37

Ähnliche Java Themen

Neue Themen


Oben