1) Es para ilustrar, en este caso no tiene sentido. Lo puse para ilustrar por qué debe ser una constante estática. Esto aplica si COLORS fuese una propiedad. Los colores se suponen que están pre-establecidos es decir que se puede crear uno, por lo que solo me interesa que:
- Sea estático (static)
- Sea constante (final)
Cuando declaras una variable u objeto como static, estás indicando que dicha variable/objeto solo tendrá una instancia que será compartida por todo aquel objeto del que sea propiedad. Si creas 5 objetos de dicha clase los 5 objetos compartirán dicha variable, ya no será una variable que pertenezca al objeto si no que dicha variable pertenece a la clase. Por eso, si el objeto 3 actualiza la variable y el objeto 5 accede a ella, el valor será el que actualizó el objeto 3.
Cuando declaras una variable/objeto como final, estás indicando que dicha variable/objeto es una constante cuyo valor no cambiará.
Por lo que static + final = Constante de la que solo habrá una instancia.
2) Declaro la variable de control como byte porque la lista a recorrer será muy pequeña (5). Si utilizo int estaría usando 4 bytes mientras que con byte solo 1. Es por cuestión de rendimiento aunque no afecte casi nada xD. Pero si un tipo de dato es mejor para X operación, debes usarlo.
3) Si, me equivoqué ^^, pero ya lo corregí.
Ejecutando lo anterior, se obtiene:
Rectángulo 1: Este rectángulo es de color Blue y tiene 50px de ancho y 50px de alto
Rectángulo 2: Este rectángulo es de color Blue y tiene 100px de ancho y 100px de alto
Rectángulo 3: Este rectángulo es de color Gray y tiene 150px de ancho y 150px de alto
Rectángulo 4: Este rectángulo es de color Orange red y tiene 200px de ancho y 200px de alto
Rectángulo 5: Este rectángulo es de color Green y tiene 250px de ancho y 250px de alto