Wypisanie metody obiektowej

0

Witam, przerabiam zadanie z klas i metod, wszystko szło bezproblemowo do momentu, gdy utworzyłem metodę MyNumber pow(MyNumber x). Inne metody typu double mogłem z łatwością wypisać, w przypadku powyższej metody już miałem problem, dlatego stworzyłem drugi obiekt typu MyNumber numb1 = numb.pow(numb), niestety nic to nie zmieniło i nie rozwiązało mojego problemu. Poniżej kod razem z klasa main:





public class Main {

    public static void main(String[] args) {

        MyNumber numb = new MyNumber(4);
        MyNumber numb1 = numb.pow(numb);
        numb.myNumberIsOdd();
        System.out.println(numb.myNumberIsOdd());
        numb.myNumberIsEven();
        System.out.println(numb.myNumberIsEven());
        numb.myNumberSqrt();
        System.out.println(numb.myNumberSqrt());
        System.out.println(numb1.pow(numb));



    }
}




public class MyNumber {

    private double number = 0;


    public MyNumber(double number) {
        this.number = number;
    }

    public double getNumber() {
        return number;
    }

    boolean myNumberIsOdd() {
        if (number % 2 != 0) {
            return true;
        }
        return false;
    }

    boolean myNumberIsEven() {
        if (number % 2 == 0) {
            return true;
        }
        return false;
    }

    double myNumberSqrt() {
        return Math.sqrt(number);
    }

    myNumber pow(MyNumber x) {
        return new MyNumber(Math.pow(number, x.number));
    }

}
1

Nie wyświetlasz "metody obiektowej" tylko wyświetlasz reprezentację w Stringu albo typu prymitywnego albo obiektu. Ponieważ MyNumber nie ma nadpisanej metody to String to wyświetli Ci nazwe klasy i hash.
I coś słabo że przez rok tylko tyle przerobiłeś :/

0

Piszę hobbystycznie jak mam czas, a mam go nie wiele, sporo też nie rozumiem, dlatego idzie dość ciężko. Czyli muszę nadpisać metodę StringtoString?

2
jasper93 napisał(a):

Piszę hobbystycznie jak mam czas, a mam go nie wiele, sporo też nie rozumiem, dlatego idzie dość ciężko. Czyli muszę nadpisać metodę StringtoString?

W Javie każda klasa dziedziczy po klasie bazowej Object. Ktoś sobie kiedyś tak założył, że klasa Object będzie miała kilka predefiniowanych metod link. Skoro dla każdej klasy w Javie, klasa Object jest klasą bazową, to każda klasa posiada dostęp do tych metod. Jedną z tych metod w klasie Object jest String toString(). Jak wskazuje dokumentacja, metoda ta zwraca:

Returns a string representation of the object.

Domyślnie, gdy próbujesz wyprintować obiekt, metoda toString() tego obiektu jest wołana. W Twoim przypadku, printujesz obiekt, który nie posiada nadpisanej tej metody, więc używana jest implementacja z klasy Object która zwraca coś takiego:

return getClass().getName() + '@' + Integer.toHexString(hashCode())

Jeśli chcesz, wypisać wartości pól swojej klasy, musisz nadpisać tą metodę w tej samej klasie, a tam zwrócić odpowiedni rezultat, oczekiwany przez Ciebie.
Poniżej stworzyłem Ci prosty przykład:

public class ToStringExample {
    private final String exampleField1;
    private final String exampleField2;
    private final String exampleField3;

    public ToStringExample(String exampleField1, String exampleField2, String exampleField3) {
        this.exampleField1 = exampleField1;
        this.exampleField2 = exampleField2;
        this.exampleField3 = exampleField3;
    }

    @Override
    public String toString() {
        return "ToStringExample{" +
                "exampleField1='" + exampleField1 + '\'' +
                ", exampleField3='" + exampleField3 + '\'' +
                '}';
    }
}

Jeśli utworzysz sobie teraz obiekt tej klasy, podasz w konstruktorze parametry, a następnie wyprintujesz tą klase, to dostaniesz w rezultacie wartość zwróconą z metody toString() z tej klasy.

1 użytkowników online, w tym zalogowanych: 0, gości: 1