🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: es.comp.lenguajes.java
Article #26950

Re: ¿Simular herencia multiple?

#26950
From: Jonathan Revusky
Date: Fri, 13 Nov 1998 00:00
108 lines
3247 bytes
Juan Gonzalo de Silva Medina wrote:
>
> Jonathan, no lo entiendo. Espero que no sean especificaciones de la 1.2

No, esto tiene que ver con el lenguaje y el lenguaje en s� no ha
cambiado entre 1.1 y 1.2. Muchos nuevos API's, pero el lenguaje es el
mismo.

> Yo he hecho:
> 
> ----------------8<-----------------
> class A{
>    private void mensajeA(){ System.out.println("Soy a"); }
> }

Tendr�a que ser algo como:

protected void mensajeA()

ya que incluso las subclases de A no pueden acceder a la implementaci�n
"private". Tiene que ser "protected".

> class B{
>    private void mensajeB(){ System.out.println("Soy b"); }
>    class C extends A{
>       public void mensajes(){
>          mensajeA();
>          mensajeB();
>          }
>    }
> }
> class D{
>   public static void main(String s[]){
>         C c = new C();
>         c.mensajes();
>   }
> }


La clase D no puede ser compilada porque no hay ninguna instancia de B a
la que la instancia de clase C puede ser asociada. (�Eso es claro
acaso?)

De hecho, necesitar�as algo como:

class B {
  private void mensajeB() {...}
  class C extends A {
    ....
  }

  C createC() {
    return new C();
  }
}

class D {
  public static void main(String s[]){
        B b = new B();
        C c = b.createC();
        c.mensajes();
  }
}


> ----------------8<-----------------
> 
> Con lo que C extenderia A y B a la vez.

No extiende A y B a la vez porque no hay herencia multiple en Java. Pero
es un modo de simularlo en cierto modo.


> 
> Como respuesta, al compilar obtengo:
> 
> prb.java:10: No method matching mensajeA() found in inner class B. C.
>          mensajeA();
>                  ^
> prb.java:18: Class C not found in type declaration.
>         C c = new C();
>         ^
> prb.java:18: Class C not found in type declaration.
>         C c = new C();
>                   ^
> 
> Tengo claro que los dos ultimos errores son ciertos, ya que C no puede
> ser instanciada ya que su ambito se restringe a la clase B.

> Pero el primero de ellos parece que dice que C no "extiende" A.

El m�todo tendr�a que ser "protected" por lo menos. "Private" es
realmente privado. No tiene acceso ni las subclases.

 
> Un poco raro �no?

Un poco rollo quiz�... :-) Raro, no, porque, en realidad, todo est�
funcionando como debe funcionar....

Un saludo,

Jonathan Revusky
-- 
Available for Java and Delphi Consulting
Make your .class files double-clickable
with SmartJ
http://www.bigfoot.com/~crystalline.solutions
Technical Details
Message-ID: <364B720E.14C0B1B8@jet.es>
Path: arc1-ca.pugleaf.net!unknown!not-for-mail
References: <72em2t$n0v$1@talia.mad.ibernet.es> <364B1D17.F50D6DAD@jet.es> <364B6C4E.F2B2D0C7@caymasa.es>

Show Full Headers
Complete Article Headers
X-Google-Language: SPANISH,ASCII
X-Google-Thread: 1116f3,a73bec53770fedc9
X-Google-Attributes: gid1116f3,public
From: Jonathan Revusky <jrevusky@jet.es>
Subject: Re: ¿Simular herencia multiple?
Date: 1998/11/13
Message-ID: <364B720E.14C0B1B8@jet.es>
X-Deja-AN: 411263666
Content-Transfer-Encoding: 8bit
References: <72em2t$n0v$1@talia.mad.ibernet.es> <364B1D17.F50D6DAD@jet.es> <364B6C4E.F2B2D0C7@caymasa.es>
X-Accept-Language: en
Content-Type: text/plain; charset=iso-8859-1
Organization: Telefonica Transmision de Datos
Mime-Version: 1.0
Reply-To: jrevusky@bigfoot.com
Newsgroups: es.comp.lenguajes.java