Для того, чтобы стоит помещать конец class?

Я нашел код, который был таким.

public final class MiClase{

}

Это что-то, что не видело, и я не знаю, если он стоил для чего-то для того, чтобы разместить конец перед class

1
задан 23.01.2017, 00:54
0 ответов

Конечный класс - просто класс, который не может быть полученным в наследство.

представь, что вся диаграмма классов твоего программного обеспечения - дерево, и конечный класс был бы листом, я оставляю тебе изображение для того, чтобы ты понял лучше:

introducir la descripción de la imagen aquí

Это не означает, что все ссылки на объекты класса действовали бы как будто они были объявлены как конец.

3
ответ дан 03.12.2019, 17:32

Значь, что класс не может быть распространенным. Согласно спецификации Java:

8.1.1.2. final Classes

В class хан be declared final if its definition is завершите and не subclasses пашите desired or required.

It is в compile-time ошибка if the ямс of в конце class appears in the extends clause (§8.1.4) of another class declaration; this implies that в final class cannot have any subclasses.

It is в compile-time ошибка if в class is declared both final and abstract, because the implementation of such в class could never be completed (§8.1.1.1).

Because в final class never существуешь any subclasses, the methods of в final class пашите never overridden (§8.4.8.1).

Переведенный:

8.1.1.2. Классы finalон

Класс может быть очевидным final если Ваше определение полное, и они не желаются или требуют sub классов.

Это ошибка компиляции, если имя класса final появись в статье extends (§8.1.4) другого заявления класса; это подразумевает, что класс final не моги иметь субклассы.

Это ошибка компиляции, если класс высказывается final и abstract в то же время, потому что осуществление вышеупомянутого класса никогда не могло бы быть завершенным (§8.1.1.1).

Ввиду того, что класс final никогда не моги иметь субклассы, методы класса final никогда они не sobreescritos (§8.4.8.1).

Это значит:

public final class NoMePuedenExtender {
    public void noPuedesTocarme() {
        System.out.println("intocable");
    }
}

//la clase de abajo lanza un error de compilación
//puesto que las clases finales no pueden extenderse
//public class IntentareExtenderte extends NoMePuedenExtender { }

//la clase de abajo lanza error de compilación
//el modificador "final" indica que no se puede extender
//mientras que "abstract" indica que debe extenderse
//para poder tener instancias de esta clase
//esto es completamente ilógico...
//public final abstract class ExtiendemeSiPuedes { }

Ты можешь использовать этот тип классов, когда ты не хочешь, чтобы другой разработчик смог менять определение методов твоего класса. Ясный пример этого - классы String и wrappers примитивных Integer, Long, Double, и т.д. Никто не нуждался бы в том, чтобы добавить или sobreescribir методы этих классов (это, как авторы Java разработали эти классы, не мое мнение). Если ты хочешь сделать это, ты можешь создавать утилитарные классы как StringUtils и сходные.

4
ответ дан 03.12.2019, 17:32

Остается только упоминать о том, что это использование тем, что объявляет класс как final.

Увеличивать классы - очень полезный, и тогда что-то, что происходит постоянно в повторениях разработки.

Однако есть случаи, в которых наследство классов может вызывать двусмысленности в существующем коде.

Например, если у меня есть код, в котором у меня есть неизменный класс MiClase что только содержит конечную стоимость, и для системы это важно, что у этого класса никогда нет поля mutables (например чтобы предотвращать, я связываю с многообразными трэдами), он может иметь смысл объявления класса final.

Также они могут признавать себя методами как final, знача, что они не могут быть sobreescrito из-за субкласса. Это очень важно в случае методов, которые называются со строителя.

1
ответ дан 03.12.2019, 17:32
  • 1
    " если я имею có я говорю, в котором у меня есть неизменный класс MiClase, который только содержит конечную стоимость, и для ló gica он важен, что у этого класса никогда нет поля mutables, имеет смысл объявления класса конца " я не верю в это. Я могу diseñ ar класс Entidad<T>, у которых были бы final T id в строителе и которые классы, которые увеличивают ее, были бы должны заявлять о том, что регистрировали id и demá s поля, чтобы показывать неизменность. Случай, где я вижу ú til, его определяет классы как final,, - если это внутренние классы другого класса. –  23.01.2017, 03:25
  • 2
    Я сказал, что он имеет смысл, не, что был обязанным. Если один использует неизменные объекты, чтобы предотвращать lí или с mú ltiples трэды, Ты с final это могут быть святое средство защиты. –  23.01.2017, 03:54
  • 3
    Что класс был неизменным, он не подразумевает, что она не смогла быть распространенной. Это моя точка. –  23.01.2017, 16:55
  • 4
    Ах, он препятствовал, извини, если не dejé это в clar, españ ol не мой язык урожденная. Я я referí в возможную утилиту гарантирования, что остается 100 % неизменных несмотря на то, что просто не позволяет быть распространенной. Ло edité для desambiguar. –  23.01.2017, 17:11