# Copyright (c) 2023 Yuki Kimoto # MIT License class Point3D extends Point { # Fields has z : rw protected int; # Class method static method new : Point3D ($x = 0 : int, $y = 0 : int, $z = 0 : int) { my $self = new Point3D; $self->init($x, $y, $z); return $self; } protected method init : Point3D ($x = 0 : int, $y = 0 : int, $z = 0 : int) { $self->SUPER::init($x, $y); $self->{z} = $z; } method clear : void () { $self->SUPER::clear; $self->{z} = 0; } method clone : Point3D () { my $self_clone = Point3D->new($self->x, $self->y, $self->z); return $self_clone; } method to_string : string () { my $x = $self->x; my $y = $self->y; my $z = $self->z; my $string = "($x,$y,$z)"; return $string; } }