Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1

    Sorvascrivere (overriding) in php come java

    Ciao a tutti !

    come ottengo questo comportamneto Java


    codice:
    class Animal{
    
       public void move(){
          System.out.println("Animals can move");
       }
    }
    
    class Dog extends Animal{
    
       public void move(){
          System.out.println("Dogs can walk and run");
       }
       public void bark(){
          System.out.println("Dogs can bark");
       }
    }
    
    public class TestDog{
    
       public static void main(String args[]){
          Animal a = new Animal(); // Animal reference and object
          Animal b = new Dog(); // Animal reference but Dog object
    
          a.move();// runs the method in Animal class
          b.move();//Runs the method in Dog class
          b.bark();
       }
    }
    in PHP 5?!

    In Java b.bark() da errore!

    Come posso impedire, senza eccessivi aggiramenti, che un metodo di una classe ereditata da una superclasse ((b.bark()) sia implementabile, senza che esso faccia parte della classe genitrice?

    Grazie

  2. #2
    Nessuno???

    Classi astratte o meglio ancora le interfacce fanno altro...nella classe che implementa l'interfaccia devono esserci ALMENO i metodi dichiarati nell'interfaccia stessa.

    La keyword final blocca ereditabilità della classe e overriding del metodo.

    Non so forse non è possibile per una questione intrinseca ai linguaggi stessi (parlo sempre senza adoperare escamotage troppo spinti)??

  3. #3
    Moderatore di Sicurezza informatica e virus L'avatar di Habanero
    Registrato dal
    Jun 2001
    Messaggi
    9,782
    Temo di non aver capito esattamente cosa cerchi di fare... vuoi che NON sia possibile aggiungere nuovi metodi ad una classe derivata rispetto alla classe genitore?
    Leggi il REGOLAMENTO!

    E' molto complicato, un mucchio di input e output, una quantità di informazioni, un mucchio di elementi da considerare, ho una quantità di elementi da tener presente...
    Drugo

  4. #4
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    C'era già un tutorial su PHP OOP e Ereditarietà qui sul sito...
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  5. #5
    Innanzi tutto grazie per le risposte!

    Originariamente inviato da Habanero
    Temo di non aver capito esattamente cosa cerchi di fare... vuoi che NON sia possibile aggiungere nuovi metodi ad una classe derivata rispetto alla classe genitore?
    Esattamente. E possibilemnte senza raggiri. Volevo capire se quella cosa fatta in java di creare l'istanza "assegnandole" la classe -- Animal b = new Dog() -- (sono ancora alle prime armi non so come scriverla melgio) può essere in qualche modo trasferita in PHP5.

    Sto studiando un libro sui Design Patterns che lavora riferendosi al Java, dopo aver appreso i primi rudimenti di PHP5.

    Originariamente inviato da Andrea1979
    C'era già un tutorial su PHP OOP e Ereditarietà qui sul sito...
    Grazie Andrea ma non ci ho trovato la risposta.

  6. #6
    Mi sto scervellando alla ricerca della risposta.

    Credo di aver capito sia una limitazione di PHP che ha a che fare con il fatto di essere "debolmente tipizzato"...qualcuno mi conferma???

    Ho difficoltà a continuare la lettura del libro se non sciolgo questo nodo, dato che il libro fa ampio uso di "questa cosa":

    ClasseA object = new ClasseB

    Dove B è una derivata di A.

    Anche se sto studiando PHP ricordo che il libro si basa su Java (non chiedetemi perchè, era un libro che mi sembrava (ed è) valido per studiare i design pattern e si basa su sintassi java per gli esempi ed i codici).

    Please help!!!

  7. #7
    il problema di fondo è che Java è a tipizzazione forte, mentre PHP è a tipizzazione debole, dal momento che una variabile può essere di qualsiasi tipo in qualsiasi momento, senza dover dichiarare un tipo nel momento in cui dichiari la variabile e senza che questo tipo debba rimanere tale per tutto in cui la variabile è in memoria.

    Ora non vorrei dire una mega castroneria, ma se dichiari Animal a = new Dog(); e Dog estende Animal, mi pare che Java faccia un casting implicito ad Animal, quindi in find dei conti dovresti trovarti un'istanza di Animal e non di Dog. Ma non uso Java da un sacco di tempo e questi tricks non me li ricordo bene

  8. #8
    Grazie ratatunia.
    Quindi a quanto pare il problema l' avevo intuito...ora stabilito che nn posso implementare in quel modo quale potrebbe essere un modo per simulare quel comportamento?

  9. #9
    Utente di HTML.it L'avatar di LuckySevenRoX
    Registrato dal
    Sep 2011
    residenza
    Foligno
    Messaggi
    361
    Mi intrometto perchè sto approfondendo in questo periodo le gerarchie di classi e il loro utilizzo, quindi può servire come conferma delle mie conoscenze (giuste o sbagliate )

    Prendiamo il codice che hai postato e analizziamo questa riga:

    Animal b = new Dog();

    Il problema nasce perchè Animal non conosce il metodo bark che è contenuto nella classe Dog

    per ovviare a questo problema (sia in PHP che in Java) esiste la funziona "instanceof"

    ad esempio if (b instanceof Dog) ritorna true se b è un elemento di tipo Dog
    una volta effettuato il controllo non ti resta che creare una nuova variabile di tipo Dog che punta all'oggetto b

    spero di non aver detto fesserie o almeno di essermi sbagliato di poco.. siete liberi di correggermi! (premetto che sono andato totalmente a memoria e non ho testato ciò che ho scritto.. quindi al 99% ho sbagliato qualcosa comunque guardati bene instanceof e vedrai che una soluzione la trovi da solo!

  10. #10
    Utente di HTML.it L'avatar di homerbit
    Registrato dal
    Dec 2005
    residenza
    Roma
    Messaggi
    1,380
    Originariamente inviato da lackyluc
    In Java b.bark() da errore!
    ed in php?? funziona?

    Originariamente inviato da LuckySevenRoX
    Animal b = new Dog();

    Il problema nasce perchè Animal non conosce il metodo bark che è contenuto nella classe Dog

    per ovviare a questo problema (sia in PHP che in Java) esiste la funziona "instanceof"

    ad esempio if (b instanceof Dog) ritorna true se b è un elemento di tipo Dog
    una volta effettuato il controllo non ti resta che creare una nuova variabile di tipo Dog che punta all'oggetto b
    esatto
    If you think your users are idiots, only idiots will use it. DropBox

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.