Groups | Search | Server Info | Keyboard shortcuts | Login | Register


Groups > de.comp.lang.java > #13348

Re: Was ist an dieser Klasse falsch?

From "Peter Heitzer" <peter.heitzer@rz.uni-regensburg.de>
Newsgroups de.comp.lang.java
Subject Re: Was ist an dieser Klasse falsch?
Date 2020-07-30 09:10 +0000
Message-ID <hofh3rFkljtU2@mid.individual.net> (permalink)
References <hofcgiFjp5jU1@mid.individual.net> <hofcsgFk3c6U2@mid.individual.net> <rfu129$1lif$1@news-cypress.fernuni-hagen.de>

Show all headers | View raw


Michael Paap <feunews@mpaap.de> wrote:
>Am 30.07.2020 um 09:58 schrieb Peter Heitzer:

>> Peter Heitzer <peter.heitzer@rz.uni-regensburg.de> wrote:
>>> Ich habe ein Verständnisproblem mit folgendem kleinen Stück Javacode:
>> 
>>> import java.util.*;
>> 
>>> public class P extends Properties {
>>>        public String getProperty(String p) {
>>>                return super.getProperty(p,"de");
>>>        }
>>>        
>>>        public static void main(String[] args) {
>>>                P x=new P();
>>>                x.setProperty("a","b");
>>>                System.out.println(x.getProperty(args[0]));
>>>        }
>>> }
>> 
>>> Es wird ohne Fehler übersetzt. Wenn man es aber startet bricht es mit
>>> Stackoverflow ab. Ich kann mir nicht erklären, was hier passiert.
>>> Die abgeleitete Klasse P überschreibt die Methode getProperty(String) und
>>> ruft darin die Originalmethode getProperty(String,String) auf.
>>> Das Laufzeitverhalten mit Stackoverflow schaut aber für mich so aus, als
>>> ob die überschriebene Methode sich selbst aufruft.
>>> Wer kann mir das Verhalten erklären?

>Vorab: Es wäre sinnvoll, wenn du dein Posting nicht schon als Zitat
>beginnen würdest. Wenn man dann z.B. den Code rauskopieren will, muss
>man erst noch Zitatzeichen entfernen...
Ich hatte es ursprünglich in die falsche Gruppe gepostet und der Einfachheit (meiner
Faulheit geschuldet) hierhin als Following gepostet. Sorry dafür.

>Zur Frage: Du rufst in deiner Methode getProperty() eine Methode der
>Superklasse auf. Das könntest du übrigens auch ohne "super", weil es ja
>nicht die Methode ist, die du überschrieben hast (unterschiedliche
>Parameterzahl). Aber das ist nicht das Problem.

>Das Problem besteht darin, dass die Methode, die du da aufrufst,
>ihrerseits wieder die Methode getProperty() aufruft, die einen Parameter
>mit Deklarationstyp String hat. Und das ist aufgrund dynamischer Bindung
>dann wieder "deine" Methode getProperty(), womit du eine nette kleine
>Endlosschleife gebaut hast.
Zu der Erkenntnis hat mit ein Kollege mittlerweile auch gebracht. Ich habe nicht
überrissen, daß in der Superklasse die originale einparametrige nicht mehr sichtbar
ist, sondern nur die überschriebene.

Der Grund für die Ableitung der Properties Klasse ist in einem Programm von mir 
gegründet. Es ist ein kleiner Webservice, der sowohl als Produktivversion als auch
als Testversion läuft. Welche Version es ist, wird beim Start durch eine Systemvariable
festgelegt, welche als Präfix dient. 
Da der Service seine Parameter aus einer Datei liesst, einhält diese jeweils
einen Eintrag für Produktion und Test, z.B. Serverport=xxx bzw. TestServerport=yyy
Im eigentlichen Programm brauche ich dann keine Fallunterscheidung, da meine abgeleitete
Properties Klasse jeweils das passende Präfix vor den Namen der Property setzt.

Danke auf jeden Fall für die prompte Hilfe.

-- 
Dipl.-Inform(FH) Peter Heitzer, peter.heitzer@rz.uni-regensburg.de

Back to de.comp.lang.java | Previous | NextPrevious in thread | Next in thread | Find similar


Thread

Re: Was ist an dieser Klasse falsch? "Peter Heitzer" <peter.heitzer@rz.uni-regensburg.de> - 2020-07-30 07:58 +0000
  Re: Was ist an dieser Klasse falsch? Michael Paap <feunews@mpaap.de> - 2020-07-30 10:40 +0200
    Re: Was ist an dieser Klasse falsch? "Peter Heitzer" <peter.heitzer@rz.uni-regensburg.de> - 2020-07-30 09:10 +0000
      Re: Was ist an dieser Klasse falsch? Michael Paap <feunews@mpaap.de> - 2020-07-30 13:05 +0200
      Re: Was ist an dieser Klasse falsch? Patrick Roemer <sangamon@netcologne.de> - 2020-07-30 14:22 +0200
        Re: Was ist an dieser Klasse falsch? "Peter Heitzer" <peter.heitzer@rz.uni-regensburg.de> - 2020-07-30 13:24 +0000
      Re: Was ist an dieser Klasse falsch? Johannes Freiberger <nomail@space.invalid> - 2021-04-09 01:53 +0200
        Re: Was ist an dieser Klasse falsch? Johannes Freiberger <nomail@space.invalid> - 2021-04-09 03:04 +0200
          Re: Was ist an dieser Klasse falsch? Johannes Freiberger <nomail@space.invalid> - 2021-04-09 03:12 +0200

csiph-web