Avatar billede Lasse Novice
17. januar 2001 - 15:12 Der er 3 kommentarer og
1 løsning

Superclass og subclass...

jeg har følgende kode(3 klasser):

public class Point {
    protected int x,y;
   
    public Point() {
        setPoint(0,0);
        System.out.println(\"Point constructor: \" + toString());
    }
   
    public Point(int a, int b) {
        setPoint(a,b);
        System.out.println(\"Point constructor: \" + toString());
    }
   
    protected void finalize() throws Throwable {
        System.out.println(\"Point finalizer: \" + toString());
        super.finalize();
    }
   
    public void setPoint(int a, int b) {
        x=a;
        y=b;
    }
   
    public int getX() {return x;}

    public int getY() {return y;}

    public String toString() {return \"[\" + x + \", \" + y + \"]\";}
}

public class Circle extends Point{
    protected double radius;
   
    public Circle() {
        setRadius(0);
        System.out.println(\"Circle constructor: \" + toString());
    }
   
    public Circle(double r, int a, int b) {
        super( a, b );
        setRadius(r);
        System.out.println(\"Circle constructor: \" + toString());
    }
   
    protected void finalize() throws Throwable {
        System.out.println(\"Circle finalizer: \" + toString());
        super.finalize();
    }
   
    public void setRadius(double r) {
        radius=(r >= 0? r : 0);
    }
   
    public double getRadius() {return radius;}

    public double area() {return Math.PI * radius * radius;}

    public String toString() {return \"Center = \" + super.toString() + \"; Radius = \" + radius;}
}
import java.awt.Graphics;
import java.applet.Applet;

public class Test extends Applet {
    private Circle circle1, circle2;

    public void init() {
        circle1 = new Circle(4.5, 72, 29);
        circle2 = new Circle(10, 5, 5);
    }
   
    public void start() {
        circle1 = null;   
        circle2 = null;

        System.gc();
    }

    public void paint(Graphics g) {
        g.drawString(\"See command in console\",25,25);
    }
}

Outputtet fra dette er:
Point constructor: Center = [72, 29]; Radius = 0.0
Circle constructor: Center = [72, 29]; Radius = 4.5
Point constructor: Center = [5, 5]; Radius = 0.0
Circle constructor: Center = [5, 5]; Radius = 10.0
Circle finalizer: Center = [72, 29]; Radius = 4.5
Point finalizer: Center = [72, 29]; Radius = 4.5
Circle finalizer: Center = [5, 5]; Radius = 10.0
Point finalizer: Center = [5, 5]; Radius = 10.0

Hvordan kan det være at Radius bliver printet ud når konstruktor og finalizer i point bliver eksekveret???? og hvad refererer super.finalize() i point finalizer motoden til????
Avatar billede Lasse Novice
17. januar 2001 - 15:15 #1
hvad er superclassen til point????
Avatar billede Lasse Novice
17. januar 2001 - 15:19 #2
output kommer ved at man eksekverer Test.class som en applet i en html kode.
Avatar billede Lasse Novice
17. januar 2001 - 15:26 #3
har fundet ud af det...
Avatar billede ricki Nybegynder
17. januar 2001 - 15:27 #4
alle klasser arver fra klassen java.lang.Object, dvs hvis du ikke selv skriver \"extends <klasse>\" efter klasse erklæringen så vil der står \"extends java.lang.Object\" med usynlig blæk :-)
Og når du så i din Point-klasse referer til super.finalize() så henvises der altså til den finalize() der findes i Object-klassen
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester