Столкнувшись с проблемой при реализации интерфейса в Java - PullRequest
0 голосов
/ 23 января 2019

Я изучал, что

"Класс, реализующий интерфейс, должен реализовывать все методы, объявленные в интерфейсе"

Я изучаю CharSequence по этой ссылке здесь CharSequence, имеющая 4 метода, в соответствии с определением интерфейса класс должен реализовывать все методы интерфейса.

Я создал один класс и реализовал интерфейс CharSequence

, но здесь яя не переопределяю метод "toString ()" и работает нормально.

Я хочу знать, что мой код не выдает никакой ошибки, когда я не переопределяю "toString ()", но выдает ошибку, если я не реализую метод других.

код ниже работает для меня, но я думаю, что он должен выдать ошибку.

    import java.util.*;
import java.lang.*;
public class Charsequence {

    public static void main(String args[]){
        System.out.println("hello...");
    }

}
class Subsequence implements CharSequence{

public char charAt(int index){
    return '1';
}

public int length(){
    return 1;
}

public CharSequence subSequence(int start, int end){
    return "" ;
}

/*public String toString(){
    return "";
}*/


}

извините за плохой английский.

Спасибо :)

Ответы [ 5 ]

0 голосов
/ 23 января 2019

Все классы Java расширяют предопределенный класс, называемый Object.Класс Object имеет несколько определенных для вас методов, один из которых toString().Если мы не определяем toString() в нашем собственном классе, то используется toString() класса Object.Однако, если мы реализуем интерфейс, мы должны определить методы, объявленные в этом интерфейсе.Если мы не хотим определять эти методы в реализующем классе, он должен быть объявлен как abstract.

0 голосов
/ 23 января 2019

В Java каждый класс по умолчанию расширяет Object класс в Java. Класс Object уже имеет реализацию по умолчанию для метода toString(). Таким образом, каждый класс, созданный в Java, имеет родительский класс по умолчанию, т.е. класс объекта. В вашем случае, допустим, ваше имя класса Test, Test использует реализацию метода toString () по умолчанию, предоставленную в классе Object.

Во время компиляции java генерирует файл .class для каждого класса. Если вы видите код файла Test.class, он будет выглядеть так:

class Test extends Object implements CharSequence{

   // YOUR CODE

}

Если вы хотите обеспечить реализацию toString(), вы можете переопределить ее в своем классе.

0 голосов
/ 23 января 2019

Все классы имеют метод toString(), потому что они наследуют Object#toString, поэтому он фактически "реализован". Вы должны однако переопределить его и правильно реализовать, как указано в документации CharSequence.

0 голосов
/ 23 января 2019

toString реализовано в java.lang.Object. Чтобы быть неабстрактным, метод просто нуждается в реализации. Это даже если метод реализован в суперклассе класса, который реализует интерфейс.

В некоторых случаях вы можете получить синтетический метод в подклассе, если есть ковариантные возвращаемые типы.

0 голосов
/ 23 января 2019

Все классы в Java расширяют Object класс.
Это потому, что класс Object реализует toString().

...