|
| Abstrakt indre klasse Fra : Mads Pedersen |
Dato : 28-06-01 17:31 |
|
Hej allesammen!
Lige et spørgsmål her i sommervarmen:
Kan man lave en abstrakt indre klasse i en abstrakt klasse? Det er så
meningen, at den abstrakte klasses abstrakte indre klasse også skal
overskrives i en subklasse. Hehe, noget af en smøre!
På forhånd tak og med venlig hilsen,
Mads Pedersen
mads@mads-p.dk
| |
Ulrik Magnusson (28-06-2001)
| Kommentar Fra : Ulrik Magnusson |
Dato : 28-06-01 17:42 |
|
Mads Pedersen wrote:
> Kan man lave en abstrakt indre klasse i en abstrakt klasse? Det er så
> meningen, at den abstrakte klasses abstrakte indre klasse også skal
> overskrives i en subklasse. Hehe, noget af en smøre!
Jeg kan ikke lige se, hvad du skal bruge det til, og det bliver nok lidt
rodet,
men jo, det kan man godt:
abstract class A
{
protected abstract class AI
{}
}
class B extends A
{
private abstract class BI extends AI
{}
}
Ulrik Magnusson
| |
Jonas Kongslund (28-06-2001)
| Kommentar Fra : Jonas Kongslund |
Dato : 28-06-01 18:06 |
|
Ulrik Magnusson wrote:
> Jeg kan ikke lige se, hvad du skal bruge det til, og det bliver nok lidt
> rodet, men jo, det kan man godt:
Jeg vil lige bidrage med en anden kuriøsitet. Flg. kode er lovlig:
class A {
class B extends A {
}
}
Hvem kan komme med en fornuftig ide til, hvad man kan bruge dette til?
--
Jonas Kongslund, http://kongslund.dk
| |
Ulrik Magnusson (28-06-2001)
| Kommentar Fra : Ulrik Magnusson |
Dato : 28-06-01 18:13 |
|
Jonas Kongslund wrote:
> Jeg vil lige bidrage med en anden kuriøsitet. Flg. kode er lovlig:
>
> class A {
> class B extends A {
> }
> }
>
> Hvem kan komme med en fornuftig ide til, hvad man kan bruge dette til?
Et godt spørgsmål er måske, hvad følgende skriver ud:
class A
{
A()
{
System.out.println("A()");
new B();
}
class B extends A
{
B()
{
System.out.println("B()");
}
}
public static void main( String[] args )
{
new A();
}
}
Svaret lægger jeg i reply til denne for ikke at ødelægge quiz'en
Ulrik Magnusson
| |
Ulrik Magnusson (28-06-2001)
| Kommentar Fra : Ulrik Magnusson |
Dato : 28-06-01 18:18 |
|
Ulrik Magnusson wrote:
> Et godt spørgsmål er måske, hvad følgende skriver ud:
>
> class A
> {
> A()
> {
> System.out.println("A()");
> new B();
> }
> class B extends A
> {
> B()
> {
> System.out.println("B()");
> }
> }
>
> public static void main( String[] args )
> {
> new A();
> }
> }
Der skrives "A()" ud indtil fortolkeren crasher:
.
.
.
A()
A()
A()
A()
#
# An EXCEPTION_STACK_OVERFLOW exception has been detected in native code
outsid
the VM.
# Program counter=0xbffa367e
#
Press any key to continue . . .
AV AV AV! Det kan altså godt lade sig gøre at skrive meget, meget
grim kode i Java.
Ulrik Magnusson
| |
Niels Teglsbo (29-06-2001)
| Kommentar Fra : Niels Teglsbo |
Dato : 29-06-01 02:13 |
|
Ulrik Magnusson <ulrikm@yahoo.com> wrote:
> > Et godt spørgsmål er måske, hvad følgende skriver ud:
> >
> > class A
> > {
> > A()
> > {
> > System.out.println("A()");
> > new B();
> > }
> > class B extends A
> > {
> > B()
> > {
Her udføres default-konstruktøren A() og dermed rykker programmet
direkte til Nirvana.
> > System.out.println("B()");
> > }
> > }
> >
> > public static void main( String[] args )
> > {
> > new A();
> > }
> > }
> # An EXCEPTION_STACK_OVERFLOW exception has been detected in native code
> outsid
> the VM.
> # Program counter=0xbffa367e
> #
> Press any key to continue . . .
Er der ikke noget med, at VM ikke må crashe lige meget hvor elendig
bytekoden er?
--
Niels, The Offspring Mailinglist www.image.dk/~teglsbo
| |
Jonas Kongslund (29-06-2001)
| Kommentar Fra : Jonas Kongslund |
Dato : 29-06-01 03:57 |
|
Niels Teglsbo wrote:
> Er der ikke noget med, at VM ikke må crashe lige meget hvor elendig
> bytekoden er?
VM'en er godt klar over at der er noget galt og stopper derfor
udførelsen med en sigende fejlbesked. Det vil ikke give megen mening at
den forsætter da stakken ikke kan blive større.
--
Jonas Kongslund, http://kongslund.dk
| |
Ulrik Magnusson (29-06-2001)
| Kommentar Fra : Ulrik Magnusson |
Dato : 29-06-01 10:16 |
|
Niels Teglsbo wrote:
> > # An EXCEPTION_STACK_OVERFLOW exception has been detected in native code
> > outsid
> > the VM.
> > # Program counter=0xbffa367e
> > #
> > Press any key to continue . . .
>
> Er der ikke noget med, at VM ikke må crashe lige meget hvor elendig
> bytekoden er?
Jeg vil nu også mene at der skulle komme en StackOverflowError,
så det er en smule spooky.
Ulrik Magnusson
| |
Ulrik Magnusson (29-06-2001)
| Kommentar Fra : Ulrik Magnusson |
Dato : 29-06-01 10:33 |
|
Ulrik Magnusson wrote:
> Niels Teglsbo wrote:
> > > # An EXCEPTION_STACK_OVERFLOW exception has been detected in native code
> > > outsid
> > > the VM.
> > > # Program counter=0xbffa367e
> > > #
> > > Press any key to continue . . .
> >
> > Er der ikke noget med, at VM ikke må crashe lige meget hvor elendig
> > bytekoden er?
> Jeg vil nu også mene at der skulle komme en StackOverflowError,
> så det er en smule spooky.
nu prøvede jeg så at fange StackOverflowError, og stik imod al forventning
gik det godt:
class A
{
A()
{
new B();
}
class B extends A
{
B()
{}
}
public static void main( String[] args )
{
try
{
new A();
}
catch( StackOverflowError e )
{
e.printStackTrace();
}
}
}
kørsel giver:
java.lang.StackOverflowError
at A.<init>(A.java:7)
at A$B.<init>(A.java:11)
at A.<init>(A.java:7)
at A$B.<init>(A.java:11)
at A.<init>(A.java:7)
etc
Der _bliver_ altså smidt en StackOverflowError, men den kommer
kun til syne, hvis man fanger den - forklaring udbedes.
Ulrik Magnusson
| |
Niels Teglsbo (01-07-2001)
| Kommentar Fra : Niels Teglsbo |
Dato : 01-07-01 22:23 |
|
Ulrik Magnusson <ulrikm@yahoo.com> wrote:
> nu prøvede jeg så at fange StackOverflowError, og stik imod al forventning
> gik det godt:
>
> class A
> {
> A()
> {
Hvis man indsætter System.out.println("A()"); her igen går det stadigvæk
galt.
> new B();
> }
Det er altså ikke fordi du fanger undtagelsen, men fordi du har fjernet
den linie det går godt.
Men hvorfor dør den så af System.out.println? Er det bare en bug i VM?
--
Niels, The Offspring Mailinglist www.image.dk/~teglsbo
| |
Ulrik Magnusson (02-07-2001)
| Kommentar Fra : Ulrik Magnusson |
Dato : 02-07-01 01:02 |
|
Niels Teglsbo wrote:
> Ulrik Magnusson <ulrikm@yahoo.com> wrote:
> > nu prøvede jeg så at fange StackOverflowError, og stik imod al forventning
> > gik det godt:
> >
> > class A
> > {
> > A()
> > {
> Hvis man indsætter System.out.println("A()"); her igen går det stadigvæk
> galt.
> > new B();
> > }
> Det er altså ikke fordi du fanger undtagelsen, men fordi du har fjernet
> den linie det går godt.
LOL! Ja, det har du da såre ret i - der kommer en StackOverflowError
uanset - med mindre man bruger System.out.println. Sorry.
> Men hvorfor dør den så af System.out.println? Er det bare en bug i VM?
Man kunne jo godt få den skumle mistanke..
Ulrik Magnusson
| |
Niels Teglsbo (02-07-2001)
| Kommentar Fra : Niels Teglsbo |
Dato : 02-07-01 02:09 |
|
Ulrik Magnusson <ulrikm@yahoo.com> wrote:
> > Men hvorfor dør den så af System.out.println? Er det bare en bug i VM?
> Man kunne jo godt få den skumle mistanke..
Gad vide hvordan den opfører sig med andre VM'er.
Jeg bruger Java 2 1.3.0_01 under Windows som VM og jeg oversatte med
Jikes 1.13.
--
Niels, The Offspring Mailinglist www.image.dk/~teglsbo
| |
Ulrik Magnusson (02-07-2001)
| Kommentar Fra : Ulrik Magnusson |
Dato : 02-07-01 08:05 |
|
Niels Teglsbo wrote:
> Jeg bruger Java 2 1.3.0_01 under Windows som VM og jeg oversatte med
> Jikes 1.13.
Jeg oversatte med javac i jdk 1.2.2 og crashede med
* java.exe i samme,
* hotspot version 1.3.0_01 samt
* jview version 5.00.3167
- alle under windows.
Ulrik Magnusson
| |
Niels Teglsbo (02-07-2001)
| Kommentar Fra : Niels Teglsbo |
Dato : 02-07-01 22:24 |
|
Ulrik Magnusson <ulrikm@yahoo.com> wrote:
> > Jeg bruger Java 2 1.3.0_01 under Windows som VM og jeg oversatte med
> > Jikes 1.13.
> Jeg oversatte med javac i jdk 1.2.2 og crashede med
> * java.exe i samme,
> * hotspot version 1.3.0_01 samt
> * jview version 5.00.3167
> - alle under windows.
Har nogen en Java, hvor den ikke crasher på?
--
Niels, The Offspring Mailinglist www.image.dk/~teglsbo
| |
|
|