Προς το περιεχόμενο

JAVA ερώτηση


trad

Προτεινόμενες αναρτήσεις

Δημοσ.

Μία ερώτηση για JAVA.

1) Έστω μια κλάση Χ -superclass- και μία Υ -subclass της Χ-. Έστω, λοιπόν, ότι η Χ δεν έχει constructor χωρίς ορίσματα (no arguments constructor), αλλά 'εχει δύο constructors ο ένας

X(int a, int B)

και ο άλλος

Χ(double a, String B).

Έστω, επίσης ότι οι constructors της subclass (Υ) δεν κάνουν explicit (αν το λέω σωστά) call του constructor της superclass. Εννοείται ότι σε αυτή την περίπτωση αυτόματα καλείται o no-arguments constructor της superclass implicity απο τον constructor της subclass. Σε αυτή την περίπτωση ποιόν απο τους δύο καλεί?

Δημοσ.

κανενα απο τους 2. ετσι και αλλιες δεν κανεις κληση σε καποιον απο αυτους που παρεχοντε (Super)

Μπορεις να παραεις απαντηση στο ερωτημα σου...με τον να γραψεις 2 απλες κλασεις οπως τιις περιγραφεις.

 

Να θυμασαι επισης το εξης! Στην Java καθε κλαση πρεπει να εχει εναν constructor. Γιαυτο λοιπον οταν ο προγραμματιστης δεν παρεχει εναν ...(το ξεχασε πχ) η Java αυτοματα δημιουργει εναν ...τον λεγομενο default constructor (χωρις ορισματα χωρις τιποτα).

Δημοσ.

Μια ακόμα ερώτηση που θέλω να κάνω είναι η εξής:

Το ποιές είναι οι "τυπικές" διαφορές μεταξύ interface και abstract class ξέρω. Παρά λοιπόν τις διαφορές τους (στην σύνταξη και κάποιες άλλες) είναι πάρα πολλές φορές (αν όχι πάντα) που μπορείς να αντικαταστήσεις μία abstract με ένα interface (εννοώ να φτιάξεις το ίδιο functionality είτε ορίζοντας μια abstract που θα γίνεται extend απο μια ομάδα απο subclasses είτε να ορίσεις ένα interface που θα γίνεται implement απο την ίδια ομάδα, κάνοντας χρήση των πλεονεκτημάτων του πολυμορφισμού σε κάθε περίπτωση). Αυτό που θέλω να ρωτήσω είναι στην πράξη πότε χρησιμοποιούμε το ένα και πότε το άλλο και γιατί. Μπορεί κάποιος να μου δόσει ένα παράδειγμα?

Δημοσ.

http://javaboutique.internet.com/articles/ITJ/part05/page02.html

 

μια abstract Κλαση σαν οντοτητα σημαινει οτι μπορει να περιεχει καποιο ειδος functionality Που ο προγραμματιστης της θα ηθελε να κληρονομηθει και στους αλλους χρηστες- απογονους αυτης της κλασης. Ενα interface ειναι μια πιο γενικοτερη εννοια..εδω μονο συμφωνουμε για το πως θα μοιαζουν ολες οι κλασεις που θα ακολοθουν το Interface.Ολοι εμεις που θα δημιουργησουμε τετοιες κλασεις κατα καποιο τροπο ειμαστς συμφωνοι οτι θα κανουμε οτι ειναι αναγκαιο για να πληρουμε τα standard. χωρις να κληρονομησουμε κατι ..καποιο βασικο functionality απο καποιον.

 

Πχ

Η κλαση οχημα εχει την μεθοδο..

>
boolean ΙΗαveWheels

 

Καθε υποκλαση της οχημα πρεπει να εχει μια τετοια μεθοδο.για καθαρα τυπικους και τεχνικους λογους...(συγνωμη για την απλοτητα του παραδειγματος) υπαρχει καποιος λογος αυτη η μεθοδος να μην κληρονομηθει απο τα αλλα οχηματα; Η χρηστικοτητα ειναι η ιδια!

Δημοσ.

Έστω' date=' επίσης ότι οι constructors της subclass (Υ) δεν κάνουν explicit (αν το λέω σωστά) call του constructor της superclass. [b']Εννοείται ότι σε αυτή την περίπτωση αυτόματα καλείται o no-arguments constructor της superclass implicity απο τον constructor της subclass.[/b] Σε αυτή την περίπτωση ποιόν απο τους δύο καλεί?

 

Προσοχή! Αν *δεν* έχεις δηλώσει *καθόλου* constructors για μία κλάση τότε και *μόνο* τότε ο compiler θα *βάλει* τον default όπως πολύ σωστά λέει ο javanidhs. Εφόσον όμως έχεις δηλώσει έστω και 1 constructor με arguments τότε ο no-arguments *δεν* τοποθετείται!

 

Για την σχέση ή όχι που έχει ένα interface με μία abstract class, θα προσπαθήσω να δώσω ένα απλό παράδειγμα για να το καταλάβεις.

 

[Ρεαλιστικό Παράδειγμα] *chic*

Σκέψου πως εσύ σαν *άνθρωπος* έχεις ένα "interface" για να τρως *φαγητό* (το κάνεις μπουκίτσες, το βαζεις στο στόμα, το μασάς, το καταπίνεις).

 

Τώρα το πως "το κάνεις μπουκίτσες", εξαρτάται από το τι τρως.

 

Π.χ.

 

Σε κάτι υγρό (μία σούπα) θα έπερνες μία κουταλιά

Σε κάτι στερεό (ένα κρεατικό) θα το έκοβες με το μαχαίρι.

 

Άραγνωρίζεις άμεσα μια *μερική* λειτουργία, αλλά όχι και όλες τις λεπτομέρειες στο πως μπορείς να φας ένα φαγητό. Αυτό θα μπορούσε να είναι μία abstract class.

 

Είναι σημαντικό να αναγνωρίσεις από νωρίς τα interfaces που χρειάζονται για να προσδιορίσεις τα functionalities της εφαρμογής σου, καθώς αυτό βοηθάει στο να έχεις άμεσα μια γενική εικόνα του πως δουλεύει και τι ακριβώς κάνει το πρόγραμμα σου.

 

Keep programming! :)

Δημοσ.

Δεν είμαι σίγουρος για την Java αλλά ισχύει στην C#.

Σε μία δικιά σου class μπορείς να κληρονομήσεις όσα interfaces θες, αλλά μόνο μία κλάση (έστω και abstract).

Δημοσ.

thanks όλους. Το πρώτο μου ερώτημα, προφανώς δεν το έθεσα σωστά και ξεκάθαρα.

Έστω:

>
public class X {
...
...

public X(double a, double b)
{
...
}

public X(int a, int b)
{
...
}
...
...
}

...και

>
public class Y extends X {
...
...
public Y()
{
; // το ξέρω ότι δεν χρειάζεται να ορίσω την no-args αλλά το κάνω επίτηδες για τις ανάγκες της ερώτησης
}
...
...
}

Λοιπόν, όταν δημιουργήσουμε ένα object της Υ, εφόσν δεν υπάρχει explicit κλήση του constructor της super της μέσα στον δικό της constructor, σύμφωνα με τα τεφτέρια μου η JAVA η πρώτη δουλειά που θα κάνει είναι να φωνάξει απο μόνη της τον no-argument constructor της super. Έλα όμως που στην super έχω ορίσει δύο constructor αλλά κανένας απο τους 2 δεν είναι no-arguments...

Τι θα γίνει σε αυτή την περίπτωση? Θα μου βγάλει σφάλμα ο compiler? Θα φωνάξει "με το έτσι θέλω" έναν υποθετικά υπαρκτό no-args constructor της X? Τι?

Δημοσ.

Εγώ πάλι γιατί έχω την εντύπωση ότι δε γίνεται?

Για δοκίμασε το να δεις αν σε αφήνει.

Δημοσ.

Δεν είμαι μπροστά σε Η/Υ με java αυτή τη στιγμή και δεν μπορώ να δοκιμάσω. Θα το δω όμως το απόγευμα. Αλλά απο την άλλη απ' όσο ξέρω και καταλαβαίνω οι constructors δεν κληρονομούνται.

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...