Hacer Las Subclases Heredan Variables De Instancia Privadas De Superclases

Hacer las subclases heredan los campos privados?

Esta pregunta se aborda el mismo problema pero yo no entiendo muy bien cómo que satisface la (aparentemente) situaciones contradictorias a continuación.

http://docs.oracle.com/javase/tutorial/java/IandI/subclasses.html

Dice que “Una subclase no hereda los miembros privados de su clase padre.”

Esto significa que no hereda las variables de instancia privadas ni privado de los métodos de la derecha?

Sin embargo, ¿cómo funciona esto si hereda un descriptor de acceso público el método de su padre? Devuelve una variable de instancia que no sabe que existe?

También, mi ordenador, libro de ciencia (Barón de AP de Ciencias de la computación A) tiene la respuesta correcta a una pregunta que dice que “El (Subclase) hereda todas las variables de instancia privadas y públicas de descriptor de acceso a los métodos de la Superclase).”

No esta en la contracción de oracle tutorial?

Gracias por su ayuda

OriginalEl autor Ian | 2012-05-08

6 respuestas

  1. 0

    Miembros privados son heredados. Para probar esto, usted puede hacer lo siguiente en la superclase:

    //...
    private String myText = "I'm in the superclass";
    
    private void setMyText(String myTextValue)
    {
        this.myText = myTextValue;
    }
    
    public void setMyTextPublic(String myTextValue)
    {
        setMyText(myTextValue);
    }
    
    public String getMyText()
    {
        return myText;
    }
    //...

    Crear un método en la clase heredada:

    //...
    public void setMyTextInTheSuperClass(String myTextValue)
    {
        System.out.println(getMyText());
        setMyTextPublic(myTextValue);
        System.out.println(getMyText());
    }
    
    public void setConstantValueToMyText()
    {
        setMyTextInTheSuperClass("I am in the child class");
    }
    //...

    Y llame a setConstantValueToMyText en algún lugar.

    Yo estoy a favor de metasyntactic esquemas de asignación de nombres, pero en cierto punto se puede obtener complicado. Probablemente, usted debe cambiar el nombre de foobar a setFoo y barfoo a getFoo.
    tienes toda la razón en señalar que el problema de nomenclatura, sin embargo las denominaciones en el código de prueba fueron, sin ningún sentido de propósito para mostrar el op, que es, probablemente, un novato que estamos hablando de cualquiera de los miembros y cualquier función, no sólo la configuración u obtener valores. Sin embargo, tienes razón cuando dices acerca de estas denominaciones que “no intente esto en casa, su namings debe tener sentido”.
    Supuse que la mayoría de la gente tiene el sentido de no a nombre de sus métodos, como por ejemplo que en el código real, pero cuando traté de seguir su ejemplo y me fue muy poco confundido. Sólo puedo imaginar lo complicado sería para un principiante.
    Justo lo suficiente, el código es modificado. Tal vez sea más útil ahora.
    Sí, estás en lo correcto. Si intenta manipular myText directamente de la clase heredada, su código no compilará.

    OriginalEl autor Lajos Arpad

  2. 10

    El descriptor de acceso funcionará bien. Recuerde que el descriptor de acceso se ejecuta en el “contexto” de la superclase y así el descriptor de acceso será capaz de ver el miembro oculto de las subclases.

    Como para el libro de texto, depende de tu punto de vista. La subclase hereda los miembros privados en el sentido de que en realidad están ahí dentro de las instancias de la subclase (así que voy a tomar de memoria, etc.), pero la subclase será incapaz de acceder directamente a ellos.

    +1 Sí, su respuesta puede ser enfatizado por ejemplo: los seres Humanos heredan (si creemos en la teoría de la evolución) algún tipo de cola de los monos (una parte del hueso en la parte inferior) pero no se puede menear su cola. Ellos sólo pueden ver a los monos como se menean la historia, o para darles de plátano para animarles a menear su historia.
    Y cómo se relaciona esto con la herencia de métodos privados? Son inheritted pero oculto? No se puede usar (objeto de la subclase).(método privado de superclsas) derecho? edit: Lajos que es un gran ejemplo.
    Está relacionado con el hecho de que la cola es de un miembro privado de los monos, meneando el cuento es un método privado, porque sólo los monos tienen colas y sólo ellos pueden menean sus colas. Sin embargo, hay dos métodos: el primero es el método público de ver a la cola de los monos, la cual está definida en la clase base (Mono) y puede ser accesible a los seres humanos, que también son capaces de ver a los monos meneando su historia, mientras que el segundo es el método privado de dar plátano a los monos, que sólo es accesible para los seres humanos, porque los monos son egoístas y no dan plátano a cada uno de los otros.
    También he dado una respuesta, donde usted puede probar esto.
    Y menear la cola es un método privado de mono? Y por lo tanto no se hereda por el ser humano?

    OriginalEl autor QuantumMechanic

  3. 5

    Piensa que es como una cebolla. Cada nivel de la jerarquía es una capa de la cebolla. Por ejemplo, Si la clase C se extiende de la Clase B, que se extiende de la clase, a continuación, un objeto de la clase C sería:

    un Objeto de la Clase C

           -------------------------------------------------------------
           |                                                           | 
           |                   C and it's members                      |
           |                                                           |
           |    ------------------------------------------------       |
           |    |                                              |       |
           |    |              B and it's members              |       |
           |    |    ------------------------------------      |       |                                              
           |    |    |         A and it's members       |      |       |
           |    |    |                                  |      |       |
           |    |    ------------------------------------      |       |                                   
           |    ------------------------------------------------       |
           |                                                           |
           -------------------------------------------------------------            

    Por lo tanto, un objeto de la clase C tiene los miembros de B y A. Pero no puede acceder a los miembros privados de B y A.

    No obstante, puede acceder a los miembros public y protected de B y A.

    Por lo que un descriptor de acceso público de la función de B, o permita que esta un objeto de la clase C para el acceso privado a una variable de instancia de la clase B o de clase “parte” del objeto.

    OriginalEl autor Anup Cowkur

  4. 2

    “No hereda” aquí significa que usted no puede tener acceso a él. Todavía existe, sólo que no en cualquier manera que usted puede interactuar con (excepto a través de llamadas no-privado métodos de la superclase).

    El aceptó responder en la pregunta que usted vinculados a explicar eso. ¿Hay algo en particular parte de la explicación de que no está claro?

    Lo que no está claro es por qué mi libro de texto dice que es la respuesta a esa pregunta.
    Sólo significa algo un poco diferente por “hereda”.
    Eso tiene sentido, muchas gracias.

    OriginalEl autor trutheality

  5. 1

    Sin duda, cuando se crea un objeto de una clase B que hereda de una clase A si la clase A tiene elementos privados, de acuerdo a las reglas de acceso en Java, no puede tener acceso a ellos, pero estos elementos no existen en la memoria privada, incluso como una referencia null si fueran objetos nulos.

    En El Lenguaje Java Especificación, se puede leer:

    Una clase hereda de su superclase directa y directa superinterfaces
    todos los nonprivate campos de la superclase y superinterfaces que
    son accesibles para el código en la clase y no se oculta por un
    declaración de la clase.

    Un private campo de una superclase puede ser accesible a una subclase –
    por ejemplo, si ambas clases son miembros de la misma clase.
    Sin embargo, un private campo nunca es heredado por una subclase.

    OriginalEl autor Paul Vargas

  6. 1

    Si la subclase en el mismo paquete que hereda los miembros privados también lo contrario, que hereda los miembros public y protected sólo!

    OriginalEl autor Yashaswi Bhardwaj

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *