Modificadores Vamos a repasar los modificadores. ¿Qué son los modificadores? Tambien llamados modificadores de acceso. Son esas palabras de public package protecte y private. Estas palabras permitirán o denegarán permiso a otros objetos a ejecutar el código que está incluido en su bloque. ¿Y qué implica eso de permitir o denegar el entrada? Pues que Java permitirá alcanzar a cualquier clase o método que quieras permitiendo compilar el código. Así entonces, si no puedes compilar porque no tiene entrada a otra clase o método, ¿qué te detiene de ir a esa clase o método y cambiar el modificador de entrada para que sea public ? La realidad es que no te detiene nada... Pero esta manera de laborar podría traerte dificultades en un futuro próximo, como que te despidan, jejeje. Los programadores restringen el entrada a ciertas áreas de código a propósito, porque no desean que otras fracciónes del código interfieran con sus Objetos. Recuerda que los Objetos pueden interactuar unos con otros y cambiar las variables de otros objetos. Si estuvieras programando Facebook, ¿dejarías que un usuario pudiera tener privilegios para cambiar la password de otro usuario de Facebook? Facebook debiera sido un fracaso. Ejemplos de Modificadores de Acceso Veamos algo de código. Un proyecto que trata sobre casas y vecindades. Existe un objeto TuCasa que representa tu casa (ieep). Hay otro objeto CasaDeTusPadres y otro que se llama CasaDeTusVecinos. He creado unos cuantos métodos dentro de cada uno de estos objetos que representan determinadas acciones que podrías hacer en un día cualquierda. El ejemplo trata de representar que pierdes la llave de tu casa y tratar de entrar en casa de alguien para buscar ayuda. Descarga aquí el programa. Y aquí puedes ver el esquema de los paquetes y clases: CasaDeTusVecinos.java package com.javadia45.tuvecindad; class CasaDeTusVecinos { void entrarEnCasaDeTusVecinos() { System.out.println("Tus vecinos están en casa así que entra a "+getClass().getSimpleName()); } } CasaDeTusPadres.java package com.javadia45.vecindaddetuspadres; public class CasaDeTusPadres { protected boolean entrarEnCasaDeTusPadres() { if (Math.random() >= 0.5) { System.out.println("Tus padres están en casa"); return true; } else { System.out.println("Tus padres no están en casa"); return false; } } private void cambiarTermostato() { System.out.println("Sólo tus padres pueden cambiar el termostato"); } } TuCasa.java package com.javadia45.tuvecindad; import com.javadia45.vecindaddetuspadres.CasaDeTusPadres; public class TuCasa extends CasaDeTusPadres { protected void entrarATuCasa() { System.out.println("Entrando a tu casa."); } public void llamarALaPuerta() { System.out.println("Estás llamando a la puerta de "+getClass().getSimpleName()); double numAleatorio = Math.random(); if (numAleatorio >= 0.5) { System.out.println("Bienvenido a "+getClass().getSimpleName()); entrarATuCasa(); } else { System.out.println("Nadie responde."); irACasaDeLosPadres(); } } protected void irACasaDeLosPadres() { System.out.println("Estás caminando hacia la casa de tus padres."); if (!this.entrarEnCasaDeTusPadres()){ CasaDeTusVecinos casaDeTusVecinos = new CasaDeTusVecinos(); casaDeTusVecinos.entrarEnCasaDeTusVecinos(); } } } ModificadoresDeAcceso.java package com.javadia45.ejecutables; import com.javadia45.tuvecindad.TuCasa; public class ModificadoresDeAcceso { public static void main(String[] args) { TuCasa tuCasa = new TuCasa(); tuCasa.llamarALaPuerta(); } } Puede que no reconozcas el método Math.ramdom(). Es un método muy provechoso que devuelve un número aleatorio entre 0.0 y 1.0. Pero mejor vamos a fijarnos en lo relevante: TuCasa extends CasaDeTusPadres CasaDeTusVecinos no emplea ningún modificador CasaDeTusPadres tiene un método privat Como TuCasa extends CasaDeTusPadres implica que TuCasa tendrá entrada a todos los métodos publi y protected dentro de CasaDeTusPadres y también a todos los métodos public protecte y private dentro de su propio código. ¿qué puedo aprender de ésto? public (Objectos y Metodos) Si un método está declara public , entonces todos los objetos o métodos que existan dentro de cualquier package en tu proyecto tendrá entrada a ese método. Esto es equivalente a que dejeís la puerta de tu casa totalmente libre al público. Estás invitando a cualquiera a que entre.  Nota: Sólo porque tu objeto sea declarado public no implica que cualquier otro objeto o método tiene entrada a todo apariencia de tu objeto ... ya que aún podemos adaptar el nivel de entrada de los métodos dentro de tu objetos protected (sólo métodos) Si tu método (dentro de tu objeto) está declarado como protected , esto implica que el único objeto/método que tendrá entrada a tu método son aquellos que extiendan tu objeto (u objetos que tu objeto extienda). En otras palabras, cualquier objeto en la cadena de herencia de tu objeto, tendrá entrada a tu método protected Esto se puede apreciar when TuCasa llama a protected boolean entrarACasaDeTusPadres() . Este método es protected , y pertenece a otro objeto ( CasaDeTusPadres ), pero como TuCasa entends CasaDeTusPadres , entonces todos contentos. package (Objectos y métodos) Este modificador no se emplea a menudo ya que no hay demasiadas aplicaciones prácticas para ello. Este modificador puede observarse en el objeto CasaDeTusVecinos . Mira al void entrarACasaDeTusVecinos() . Verás que no hay modificador para este método, esto implica que tiene el modificador del package. Realmente no habéis ya que el modificador package en el código para especificar que debería tener un nivel de package. Raro, pero es así. Así que cuando tu método (dentro de tu objeto) es declarado como package implica que sólo otros objetos que pertenezcan al mismo paquete pueden ver tu método. Verás que TuCas y CasaDeTusVecinos pertenecen al paquete com.javadia45.tuvecindad . Así que esto implica que TuCasa puede alcanzar a los métodos  del paquete. Sin embargo, si crease un método protected dentro de CasaDeTusVecinos, entonces TuCasa no sería capaz de alcanzar a este método. Esto es porque CasaDeTusVecinos NO está dentro de la cadena de herencia de TuCasa. private (sólo métodos) Cuando un método es declarado como private, implica que SÓLO el objeto que declara el método tendrá entrada a él. Dicho esto, entonces TuCasa NO accederá al método private void cambiarTermostato()  detro del CasaDeTusPadres (a pesar de que están en la misma cadena de herencia). Resumen Si vas a diseñar una aplicación web usando Java y decides realizar todo public, pronto verás yerros aparecer. Utilizando modificadores de entrada es algo beneficioso para una codificación enfocada a objetos. Así que recuerda diseñar tu aplicación teniendo siempre presente el mundo real. Si un objeto tiene un método que no tendría sentido que otro objeto utilice, entonces hazlo private . Esta es una buena práctica de programación y se llama encapsulación, que dicho así agrada mucho mejor....