Erste Schritte Umstieg von PHP - Deklaration

elf

Neues Mitglied
Guten Tag,

ich bin ein völliger Neuling in Java, habe aber bereits einiges an Programmiererfahrung in PHP gesammelt. Nun gibt es in PHP keine Variablen Deklaration, etc., was mir nun den Umstieg ein wenig erschwert.

Mein Problem ist, denke ich, ziemlich simpel:
Wenn ich eine Variable mit einer Elternklasse deklariere, scheine ich nur Zugriff auf die Eigenschaften und Methoden eben jener Elternklasse zu haben. Natürlich wird jeder etwas weiter fortgeschrittene Java Entwickler mit diesem Verhalten rechnen, mich verwirrt es.
Hier ein Beispiel. Ich weiß nicht, ob es etwas taugt:
Java:
public abstract class Fruit 
{
    public String color = "undefined";
}

public class Banana extends Fruit
{
    public String color = "yellow";
}

public class Apple extends Fruit
{
    public String color = "red";
}

public class FruitApp 
{
	public static void main(String[] args) 
	{	
		// Store an unknown Fruit
		Fruit fruit 	= new Banana();
		// Store a Banana
		Banana banana 	= new Banana();
		// Store an Apple
		Apple apple 	= new Apple();
		
		// Store all kinds of fruits
		Fruit[] fruitbowl = {banana, apple};
		
		// undefined
		System.out.print(fruit.color+"\n");
		// yellow
		System.out.print(banana.color+"\n");
		// undefined
		System.out.print(fruitbowl[0].color+"\n");
		// undefined
		System.out.print(fruitbowl[1].color+"\n");
	}
}

Warum enthält banana.color plötzlich "undefined"? Natürlich weil es wohl eine Variable mit dem Typ Fruit ist. Aber wie mache ich es sonst, wenn ich im Vorhinein genau sagen kann, welchen Untertyp eine Variable hat? Das Selbe mit dem Array.

Ich hoffe, irgendwer kann mir das erklären. Mir fehlen leider die Stichwörter für den erfolgreichen Einsatz einer Suchmaschine. Seid bitte nett, ich bin wirklich absolut neu was Typisierung betrifft.

lg
elf
 
Zuletzt bearbeitet:

Final_Striker

Top Contributor
Warum enthält banana.color plötzlich "undefined"? Natürlich weil es wohl eine Variable mit dem Typ Fruit ist. Aber wie mache ich es sonst, wenn ich im Vorhinein genau sagen kann, welchen Untertyp eine Variable hat?

z.B. so:

Java:
public public abstract class Fruit {
	public abstract String getColor();
}
 
public class Banana extends Fruit{
    private String color = "yellow";

	@Override
	public String getColor() {
		return color;
	}
}
 
public class Apple extends Fruit{
	private String color = "red";

	@Override
	public String getColor() {
		return color;
	}
}
 
public class FruitApp {
    public static void main(String[] args) 
    {   
        // Store an unknown Fruit
        Fruit fruit     = new Banana();
        // Store a Banana
        Banana banana   = new Banana();
        // Store an Apple
        Apple apple     = new Apple();
        
        // Store all kinds of fruits
        Fruit[] fruitbowl = {banana, apple};
        
        System.out.print(fruit.getColor()+"\n");
        System.out.print(banana.getColor()+"\n");
        System.out.print(fruitbowl[0].getColor()+"\n");
        System.out.print(fruitbowl[1].getColor()+"\n");
    }
}
 

HoaX

Top Contributor
Lass bei Banana und Apple die neudeklaration weg, denn Attribute kann man nicht überschreiben! Die von Fruit erbenden Klassen besitzen ja schon das geerbte "color". Also musst du nur den Wert neu setzen.
Java:
public class Banana extends Fruit
{
    Banana() {
        color = "yellow";
    }
}
public class Apple extends Fruit
{
    Apple() {
        color = "red";
    }
}
 
G

Gast2

Gast
Dein Array ist vom Typ Fruit, daher wird die color Eigenschaft von Fruit genommen.

Soll dein Beispiel irgendwas Polymorphie ähnliches sein? Das macht man in der Regel anders.
 
G

Gast2

Gast
EDIT:
So macht das ganze etwas mehr sinn:

Java:
public abstract class Fruit {
    private String color;
    
    public Fruit(String color) {
    	this.color = color;
	}
    
    public String getColor() {
		return color;
	}
}

Java:
public class Banana extends Fruit {
	public Banana() {
		// call the fruit constructor
		super("yellow");
	}
}

Java:
public class Apple extends Fruit {
	public Apple() {
		// call the fruit constructor
		super("red");
	}
}
Zu langsam :(
Und noch den falschen button erwischt :)
 
Zuletzt bearbeitet von einem Moderator:

delphiking1980

Bekanntes Mitglied
Ich möchte mich doch gerne mal etwas weit aus dem Fenster lehnen aber ist dies nicht ein fall für Shadowing da nämlich die neue Klasse die alte Variable überdeckt ???

Java:
Banana b = new Banana();
System.out.println(b.color());
Fruit f = (Fruit) b;
System.out.println(f);

Lass bei Banana und Apple die neudeklaration weg, denn Attribute kann man nicht überschreiben! Die von Fruit erbenden Klassen besitzen ja schon das geerbte "color". Also musst du nur den Wert neu setzen.
Java:
public class Banana extends Fruit
{
    Banana() {
        color = "yellow";
    }
}
public class Apple extends Fruit
{
    Apple() {
        color = "red";
    }
}
 
S

Spacerat

Gast
[OT]wahhh... also "public Irgendwas irgendwas;" macht wenig Sinn, weil man's von aussen ändern kann wie man will, schlimmstenfalls 'null' zuweisen. "public final Irgendwas irgendwas;" ist da schon sinnvoller.[/OT]
 

elf

Neues Mitglied
Vielen Dank! Ich verstehe jetzt.
PHP hat eine Neudeklaration eines Attributs erlaubt. Bzw. hat es sich so verhalten, als hätte man den neuen Wert im Konstruktor zugewiesen. Mir ging es also um ganz grundlegendes Verhalten bei Vererbung.

Danke nochmal allen, für die Hilfe! Dann kanns jetzt weiter gehen. ;)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Umstieg von C# nach Java Java Basics - Anfänger-Themen 18
C Java umstieg Java Basics - Anfänger-Themen 2
Happy OOP Umstieg auf Java Java Basics - Anfänger-Themen 13
haansn08 Umstieg von VB.NET zu Java Java Basics - Anfänger-Themen 11
S Umstieg von C++ auf Java? Java Basics - Anfänger-Themen 9
V [UMSTIEG]Java...Tutorials... Java Basics - Anfänger-Themen 6
N Umstieg auf objektorintierte Programmierung Java Basics - Anfänger-Themen 2
T Umstieg von Python auf Java Java Basics - Anfänger-Themen 7
H Umstieg von Schul-Java auf. Java Basics - Anfänger-Themen 42
P Umstieg von Delphi nach Java Java Basics - Anfänger-Themen 2
N Wieso funktioniert die Deklaration nicht Java Basics - Anfänger-Themen 3
D Datentypen Char deklaration Java Basics - Anfänger-Themen 4
mars90 Fehler in der Variablen Deklaration Java Basics - Anfänger-Themen 8
J Klassen Deklaration und Initialisierung Java Basics - Anfänger-Themen 15
R Erste Schritte Deklaration und Initialisierung von Arrays Java Basics - Anfänger-Themen 21
M Wo liegt der Unterschied? Deklaration Klasse oder Konstruktur Java Basics - Anfänger-Themen 3
M Deklaration und Initialisierung bei Method Erstellung Java Basics - Anfänger-Themen 12
M Erste Schritte package-Deklaration, Problem Java Basics - Anfänger-Themen 6
M Frage zu Generics-Deklaration Java Basics - Anfänger-Themen 5
A Array Deklaration Java Basics - Anfänger-Themen 6
B Erste Schritte Unterschiede bei der Deklaration von Strings Java Basics - Anfänger-Themen 4
K Protected und Private Deklaration Java Basics - Anfänger-Themen 8
G Erste Schritte Methodenaufruf, Variablen-Deklaration Java Basics - Anfänger-Themen 6
J definition / deklaration Java Basics - Anfänger-Themen 2
K Erste Schritte deklaration von int Java Basics - Anfänger-Themen 4
S Methode Deklaration Variablen initalisieren Java Basics - Anfänger-Themen 2
D Datentypen Felder: Deklaration und Initialisierung Java Basics - Anfänger-Themen 5
S Deklaration 0x12 Java Basics - Anfänger-Themen 4
M fehler bei instanzvariablen deklaration?? Java Basics - Anfänger-Themen 6
F Datentypen Welchen Wert hat ein einfacher Datentyp nach der Deklaration? Java Basics - Anfänger-Themen 6
G Definition / Deklaration Java Basics - Anfänger-Themen 13
I Deklaration und Definition Java Basics - Anfänger-Themen 7
I Datentypen Unterschied in Deklaration von ArrayList Java Basics - Anfänger-Themen 26
Luk10 Deklaration von lokalen Variablen Java Basics - Anfänger-Themen 2
J Was genau davon ist Anweisung, was Deklaration? Java Basics - Anfänger-Themen 2
S OOP package Deklaration Java Basics - Anfänger-Themen 4
S BITTE UM HILFE: Unterschied Deklaration und Signatur einer Methode Java Basics - Anfänger-Themen 3
A Deklaration von einem Array Java Basics - Anfänger-Themen 9
A Deklaration eines Arrays Java Basics - Anfänger-Themen 11
R Deklaration: was passiert da? Java Basics - Anfänger-Themen 3
G Deklaration und Sichtbarkeit von Variablen Java Basics - Anfänger-Themen 2
S Methoden Deklaration u. Definition trennbar (wie in C)? Java Basics - Anfänger-Themen 9
C Deklaration einer Variablen in einem rekursivem Aufruf Java Basics - Anfänger-Themen 5
K Variablen Deklaration Java Basics - Anfänger-Themen 3
B Deklaration eines char-array Java Basics - Anfänger-Themen 2
J Probleme mit Deklaration Java Basics - Anfänger-Themen 13
B variable deklaration und wert speichern in 2 anweisungen? Java Basics - Anfänger-Themen 20
L Variablen-Deklaration Java Basics - Anfänger-Themen 9

Ähnliche Java Themen

Neue Themen


Oben