C# Basisklasse soll fremde Methode kennen?

3 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Bei deinen Aufrufen von ÖffneTür() bzw. ÖffneSattel() weiß der Compiler nicht, dass f den geeigneten Typ hat. (So intelligent, das aus der vorgeschalteten Bedingung herzuleiten, ist er nicht. Falls er es wäre, würde man vermutlich trotzdem noch einen Zusatz brauchen, damit man auch wirklich merkt, dass man hier eine "Typverengung" hat.)

f muss vorher in den entsprechenden Typ umgewandelt werden:

(Auto f).ÖffneTür();

bzw.

(Motorrad f).ÖffneSattel();

Vermutlich gibt es elegantere, übersichtlichere, erweiterbarere etc. Methoden, aber "Typecasting" ist eine alte Standardmethode.

z. B. object as Type (s. Antwort von  okarin)

0

Also (Auto as f).ÖffneTür() ?

0

Ne f as Auto.
Aber du musst aufpassen falls dein Fahrzeug kein Auto ist gibt as null zurück.
In deinem Fall könntest du seit C# 6.0 null propagation verwenden und (f as Auto)?.OeffneTuer() schreiben. Dann gibt der gesamte Ausdruck null zurück bzw. weil OeffneTuer void ist wird die Zeile einfach ignoriert.

1

Du musst as benutzen.
Bspw.
Auto auto = fahrzeug as Auto;
if (auto == null) { return; }

auto.oeffne_tuer();

Mit C#7 kannst du Pattern-Matching für einen sicheren Typecast verwenden:

if (f is Auto a)
{
    a.ÖffneTür();
}

Kennt Beziehung/Assoziation/Bezugsobjekte in Java?

Ich möchte in Java drei Klassen haben. Die erste führt mit der main-Methode nur die zweite aus. Die zweite erstellt ein Objekt der dritten Klasse. Diese soll aber auf die Variablen und Methoden der zweiten Klasse zugreifen (OHNE static).

Erste Klasse:

public class Start {
public static void main(String[] args) {
    new Spiel();
}

}

Zweite Klasse:

public class Spiel {
Spielfeld meinSpielfeld = new Spielfeld();

int spieler = 1;

public int getSpieler() {
    return spieler;
}

public void setSpieler(int spieler) {
    this.spieler = spieler;
}

}

Dritte Klasse:

public class Spielfeld {
private Spiel meinSpiel;

public void test() {
        
    if (meinSpiel.getSpieler() == 1) {
            meinSpiel.setSpieler(2);        
    }
}

}

Alle Klassen auf das nötigste reduziert.

Was ist zu tun, dass bei der dritten Klasse nicht immer nullPointerException kommt?

...zur Frage

Kennt jemand ein Forum bei dem man sein Code hochladen kann um Fragen beantwortet, Code bewertet und um hilfe zubekommen(Unity, C#)?

...zur Frage

Wie sieht die Punktnotation in Java aus oder wie kann ich auf auf andere Klassen zugreifen?

Wie kann ich in der Klasse Telefon die Methoden aus der Klasse Telefonbuch verwenden ? Wenn ich es mit Punktnotation versuche wie z.B.

public void eintrag_hinzufuegen(String name)
{
    Telefonbuch.hinzufuegen(name);
}

, kommt die Fehlermeldung : non static method cannot be referenced from a static context

1)

import java.util.ArrayList;
public class Telefon
{
protected ArrayList <Telefonbuch> telefonbuch;
protected boolean eingeschaltet;
        
        public Telefon()
    {
        // initialise instance variables
        telefonbuch = new ArrayList <Telefonbuch>();
    }
    
    public void anrufen (String name)
    {
    }
    
    public void einschalten()
    {
        eingeschaltet = true;
    }
    
    public void telefonbuch_uebersicht()
    {
        
    }
    
    public void eintrag_hinzufuegen(String name)
    {
    }
    
    public void eintrag_entfernen(String name)
    {
    }
    
    public boolean eintrag_suchen(String name)
    {
    }
}

2)

import java.util.Arrays;

/**
 * Write a description of class Telefonbuch here.
 * 
 * @author (your name) 
 * @version (a version number or a date)
 */
public class Telefonbuch
{
    // instance variables - replace the example below with your own
    private int anzahl_eintrag;
    private int kapazitaet;
    private String[] name_liste;
    protected boolean gefunden;

    /**
     * Constructor for objects of class Telefonbuch
     */
    public Telefonbuch()
    {
        // initialise instance variables
        String [] name_liste = new String[kapazitaet];
        gefunden = false;
    }
    
    public void set_kapazitaet(int x)
    {
        kapazitaet = x;
    }
    
    public void telefonbuch_uebersicht()
    {
        for(int i=0; i < name_liste.length; i++)
        {
        System.out.println(name_liste[i]);
        }
    }
    
    public void hinzufuegen(String name)
    {
        
    }
    
    public void entfernen(String name)
    {
    }
    
    public boolean suchen(String name)
    {
        for(int i=0; i < name_liste.length; i++)
        {
         if(name_liste[i].equals(name))
         {
         gefunden = true;
         }
         else
         {
         //Abbruch
         }
        }
        return gefunden;
    }
}

...zur Frage

Methode IOTools.readline Java Eclipse?

Guten Abend.

Ich habe mal wieder eine Frage über Java.

Ich habe ein Programm mit der main-Methode erstellt, einen String.

Dieses:

public class Hello {
  public static void main(String[] args) {
    String name = "Bsp";
    String x = name;
    System.out.println("Hallo " + x + "!");
  }
}

Diesen soll ich jetzt so umändern, dass anstelle der direkten Zuweisung meines Namens, die Variable mit Hilfe der Methode IOTools.readLine den Wert belegt.

Den Anfang habe ich schon gemacht:

import Prog1Tools.IOTools;

public class Hello {
  public static void main(String[] args) {
    IOTools.readLine();

Jedoch weiß ich nicht weiter. Dokumentationen lesen bringt mir da auch nicht viel, leider.

Ich hoffe ich bekomme hier Hilfe.

LG

...zur Frage

mit csharp zahl in microsoft access datenbank aufaddieren?

Immer wenn ich enter drücke wird 100 einem vorhandenem Wert in der Datenbank hinzugefügt. Ich habe bereits den sql Update Set Befehl und benötige nun eine Funktion für das Drücken der Enter Taste, die eine Variable zurückgibt, welche ich dann in den sql Befehl anfügen kann.

...zur Frage

Was möchtest Du wissen?