Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Java > [noob]Doubt regarding Interfaces

Reply
Thread Tools

[noob]Doubt regarding Interfaces

 
 
mmu2643@gmail.com
Guest
Posts: n/a
 
      11-07-2005
Can someone please explain the following code snippet I found on the
Swing tutorial site. Thanks!

Runnable doHelloWorld = new Runnable() {
public void run() {
System.out.println("Hello World on " +
Thread.currentThread());
}
};

Is doHelloWorld now an object or is it an abstract class or is it
something altogether different?

 
Reply With Quote
 
 
 
 
VisionSet
Guest
Posts: n/a
 
      11-07-2005

<> wrote in message
news: oups.com...
> Can someone please explain the following code snippet I found on the
> Swing tutorial site. Thanks!
>
> Runnable doHelloWorld = new Runnable() {
> public void run() {
> System.out.println("Hello World on " +
> Thread.currentThread());
> }
> };
>
> Is doHelloWorld now an object or is it an abstract class or is it
> something altogether different?


All variables are either primitives or a reference to an Object.
If they are a reference to an Object as in the case above then they can have
a type of 1 or many.
In the example above doHelloWorld is a reference to a concrete Object with
an interface Type of Runnable.
It has been created using an Annoymous class, since there is no class
declaration. If the class was not annoymous then the Object would also have
the Type of that class.

Runnable // the Type you are assigning
doHelloWorld // the variable you are assigning it to
= // assignment
new // instantiation
Runnable() {...} // annoymous class definition
.... // contents of class

this bit :
Runnable() {...} // annoymous class definition

you can think of expanding to:

private class AnnoymousClass implements Runnable {
....
}

HTH
--
Mike W


 
Reply With Quote
 
 
 
 
VisionSet
Guest
Posts: n/a
 
      11-08-2005

"VisionSet" <> wrote in message
newsRRbf.5683$...
>
> If they are a reference to an Object as in the case above then they can

have
> a type of 1 or many.


If they are a reference to an Object as in the case above then they can have
1 or many types.
Yes, all at the same time.
Google "run time type identification" and "polymorphism"

--
Mike W.


 
Reply With Quote
 
Roedy Green
Guest
Posts: n/a
 
      11-08-2005
On 7 Nov 2005 15:46:49 -0800, wrote, quoted or
indirectly quoted someone who said :

> Runnable doHelloWorld = new Runnable() {
> public void run() {
> System.out.println("Hello World on " +
>Thread.currentThread());
> }
> };
>
>Is doHelloWorld now an object or is it an abstract class or is it
>something altogether different?


it is an instance of an inner anonymous class. see
http://mindprod.com/jgloss/anonymousclasses.html
--
Canadian Mind Products, Roedy Green.
http://mindprod.com Java custom programming, consulting and coaching.
 
Reply With Quote
 
John C. Bollinger
Guest
Posts: n/a
 
      11-08-2005
VisionSet wrote:
> <> wrote in message
> news: oups.com...
>
>>Can someone please explain the following code snippet I found on the
>>Swing tutorial site. Thanks!
>>
>> Runnable doHelloWorld = new Runnable() {
>> public void run() {
>> System.out.println("Hello World on " +
>>Thread.currentThread());
>> }
>> };
>>
>>Is doHelloWorld now an object or is it an abstract class or is it
>>something altogether different?

>
>
> All variables are either primitives or a reference to an Object.
> If they are a reference to an Object as in the case above then they can have
> a type of 1 or many.


I'm not sure what you mean by that, but perhaps it's that the class of
an object can be compatible with any positive number of types. It is
necessary here to be clear about the difference between class and type.
Every object has exactly one class. Every variable and expression has
exactly one type. A non-primitive types is expressed in terms of class
names, and it serves the purpose of describing to the compiler the
possible classes of the object that its value (a reference) refers to.

> In the example above doHelloWorld is a reference to a concrete Object with
> an interface Type of Runnable.


More precisely, doHelloWorld is a variable of type Runnable, which as
the result of the assignment holds a reference to an object whose class
implements Runnable and has Object as its direct superclass.

> It has been created using an Annoymous class, since there is no class
> declaration.


Quibbling a bit here, but there *is* a class declaration -- an anonymous
one. The syntax is a bit different from that for a named class
declaration, but that doesn't make it any less a declaration.

> If the class was not annoymous then the Object would also have
> the Type of that class.


Sorry, but that's nonsense. In the first place, Object is a superclass
of the anonymous class, therefore references to its instances are
assignment-compatible with type Object. *Every* class has Object as a
superclass, and therefore *every* reference is assignment-compatible
with type Object. In the second place, classes do not have types. They
have superclasses, and they have interfaces implemented; these determine
which types their instances are compatible with. They do not have types.

> Runnable // the Type you are assigning

Runnable // the type of ...
> doHelloWorld // the variable you are assigning it to

doHelloWorld // the variable you are assigning a value to
> = // assignment
> new // instantiation
> Runnable() {...} // annoymous class definition


Which one could also call an anonymous class declaration.

[...]

> this bit :
> Runnable() {...} // annoymous class definition
>
> you can think of expanding to:
>
> private class AnnoymousClass implements Runnable {
> ...
> }


Yes, that's quite right. More right, in fact, than the idea that the
class in question really has no name. The Java source code assigns no
name to it, but the Java compiler invents one at compile time. The VM
doesn't have any concept of a class that doesn't have a name; "anonymous
class" really means something more like "class whose name I don't know
and don't care about."

--
John Bollinger

 
Reply With Quote
 
mmu2643@gmail.com
Guest
Posts: n/a
 
      11-08-2005
Thanks everyone for your replies!

I have a basic question - in the above instance Runnable is an
interface and interfaces cannot be instantiated. So something like 'new
Runnable()' seems puzzling to me. Is this syntax for instantiating an
object of the Anonymous class?

Also, is the above snippet similar to the following in the end result:

class ac implements Runnable{
public void run() {
System.out.println("Hello World on " +
Thread.currentThread());
}
};

ac doHelloWorld = new ac();

 
Reply With Quote
 
zero
Guest
Posts: n/a
 
      11-08-2005
wrote in news:1131466583.776932.254490
@g47g2000cwa.googlegroups.com:

> Thanks everyone for your replies!
>
> I have a basic question - in the above instance Runnable is an
> interface and interfaces cannot be instantiated. So something like 'new
> Runnable()' seems puzzling to me. Is this syntax for instantiating an
> object of the Anonymous class?
>
> Also, is the above snippet similar to the following in the end result:
>
> class ac implements Runnable{
> public void run() {
> System.out.println("Hello World on " +
> Thread.currentThread());
> }
> };
>
> ac doHelloWorld = new ac();
>
>


That's basically it yes.

new Runnable() {...} creates a new anonymous class that implements
interface Runnable and has whatever variables/methods you define between
the brackets.

This is often used to implement a simple event listener, for example for a
button:

Button b = new Button();

b.addActionListener(new ActionListener()
{
JOptionFrame.showMessageDialog("button clicked");
});

Note how the whole class definition is inside the parentheses of the
addActionListener method, and it is ended - like any statement - with a
semi-colon.
 
Reply With Quote
 
Thomas Hawtin
Guest
Posts: n/a
 
      11-08-2005
zero wrote:
>
> b.addActionListener(new ActionListener()
> {

public void actionPerformed(ActionEvent event) {
> JOptionFrame.showMessageDialog("button clicked");

}
> });
>
> Note how the whole class definition is inside the parentheses of the
> addActionListener method, and it is ended - like any statement - with a
> semi-colon.


Well, the class ends with the closing }. The enclosing expression
carries on as normal.

Tom Hawtin
--
Unemployed English Java programmer
http://jroller.com/page/tackline/
 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
WZCSAPI/WZC-interfaces in VB.NET Jake Wireless Networking 3 06-10-2006 08:29 PM
Question regarding marker interfaces.... pentium Java 3 11-22-2004 09:27 PM
Basic question regarding sync and async serial interfaces... Ed Simmons Cisco 6 08-01-2004 03:13 AM
Cmenu, Text Interfaces, and UTF8 shade Perl 1 08-11-2003 11:24 AM
Use private IP on inside interfaces of transit routers mliu Cisco 5 07-15-2003 08:53 PM



Advertisments
 



1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57