// Target: computer-science.bigb
An interface specifies a type contract that independent classes can implement. Code accepting the interface can operate on multiple implementations, avoiding dependence on one concrete class. A class may implement several interfaces despite having only one direct class superclass.
// Destination: computer-science.bigb
A field declared private is hidden from ordinary external source-level access. Library methods can enforce invariants and change the representation without exposing storage to clients. Returning a mutable internal object can still undermine this encapsulation in object-oriented programming.
// Destination: computer-science.bigb
A class declared final cannot be subclassed. This can protect an implementation contract against overriding in an untrusted subclass. It does not by itself make the class immutable, and it rules out subclass-based customization.
// Destination: computer-science.bigb
A protected method is accessible to code in its package and, subject to the cross-package receiver restriction, to subclasses elsewhere. It can expose a subclass customization hook without being a public client operation. Protected access is broader than subclass-only access.
// Destination: computer-science.bigb
Java arrays are fixed-length objects. A two-dimensional array is an array of row-array references, so rows can have different lengths and must be allocated separately if not allocated by the initial expression.
// Target: computer-science.bigb
// Target: computer-science.bigb
A method declaring its own type parameters, for example <T> List<T> singletonList(T value). The type parameter connects argument and result types and permits compile-time checking without casts at ordinary call sites. A method mentioning only a generic class's type parameter need not itself be a generic method.
// Destination: computer-science.bigb
Even when S is a subtype of T, neither G<S> nor G<T> is generally a subtype of the other. This prevents unsafe writes into mutable generic containers. Wildcards express restricted views.
// Target: computer-science.bigb
// Target: computer-science.bigb

Articles by others on the same topic (1)

Java is good.
Its boilerplate requirement is a pain, but the design is otherwise very clean.
But its ecosystem sucks.
The development process is rather closed, the issue tracker obscure.
And above all, Google LLC v. Oracle America, Inc. killed everybody's trust in it once and for all. Thanks Oracle.
Video 1.
Java for the Haters in 100 Seconds by Fireship (2022)
Source.