Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Supplementary Objectives
! " #
# #
# #
"
"
# " this
#
" new
# #
$ # "
" "
!
" &
#
& #
% static
'
( '
! #
)
% #
#
" )
" %
* + # * +
"
# ," -. -.
"
" #
#
# #
# "
# ! #
(
-. *
'/% +
void nsm() {
class NSLC {/*...*/} // (5) Local (inner) class in non-static context
}
' * +
# " #
# ) 0 )
!
! "
' % % 4 % 5
3 1 6
" final
! # ' 4 %
5
6
" "6
final
final
1
! # ' '
5
"
6
"6
final
final
% " ' 4 % 5
6
" "6 final
final
%
1 % " ' ' 5
" 6
"6 final
final
! ," -7 TopLevelClass *
.+
StaticMemberClass_1 *7+ #
StaticMemberInterface_1_1 *8+ StaticMemberClass_1_1 *
9+
StaticMemberClass_1_1 *
9+
StaticMemberInterface_1 *:+ ' static )
#$
// Filename: TopLevelClass.java
package express;
TopLevelClass.StaticMemberClass_1.StaticMemberClass_1_1 objRef1 =
new TopLevelClass.StaticMemberClass_1.StaticMemberClass_1_1(); // (7)
* +
" ; "
StaticMemberClass_1_1 *9+
TopLevelClass.StaticMemberClass_1.StaticMemberClass_1_1
StaticMemberInterface_1 *:+ TopLevelClass.StaticMemberInterface_1 ,
( "# <
" #
# *=+ *-+ > (
" ; " (
*
9+ express.TopLevelClass.StaticMemberClass_1.StaticMemberClass_1_1
'
" *#
:+ ," -7 !
* + #
" ?+ ,"
* -7#
TopLevelClass.StaticMemberClass_1.StaticMemberInterface_1_1
private
% #
" % "
# *
-+ ," -7 new
! TopLevelClass.java ," -7 #
# #
&
TopLevelClass$StaticMemberClass_1$StaticMemberClass_1_1.class
TopLevelClass$StaticMemberClass_1$StaticMemberInterface_1_1.class
TopLevelClass$StaticMemberClass_1.class
TopLevelClass$StaticMemberInterface_1.class
TopLevelClass.class
AnotherTopLevelClass.class
' # * " +#
*
$+ *
.+
!#
@#
import
*
A # +
import # ," -8
% !
// Filename: Client1.java
package express;
import express.TopLevelClass.*; // (1)
; -. #
" # {static}
# ) "
"
," -9
& ! !
// Filename: AccessInTopLevelClass.java
public class AccessInTopLevelClass { // (1)
System.out.println("nonstaticMethod_1 in AccessInTopLevelClass");
}
5 &
staticMethod_1_1 in StaticMemberClass_1
'!( $
," -9 "
StaticMemberClass_1_1 *?+ < k *B+
Y2K StaticMemberInterface_1_1 *-+
# *
..+ *.9+ nonStaticMethod_1_1_1()
!# *
.-+ main()
# *
.=+ *
.?+
static "
int ii = AccessInTopLevelClass.StaticMemberClass_1.i;
AccessInTopLevelClass.StaticMemberClass_1.staticMethod_1_1();
' static
@# static "
%
*
public protected / private+
StaticMemberClass_1 *
8+ private #
StaticMemberClass_1_1 *
?+ protected StaticMemberClass_1_1
main() # "
>java AccessInTopLevelClass$StaticMemberClass_1$StaticMemberClass_1_1
' StaticMemberClass_1_1
"
% " #
"
! #
@# final #
1 * +
private ' " (
% 1 #
# Node LinkedList
Node private
LinkedList ' " # "
) ! *
5 &
% new
" # $ ) "
# % #
#
' " #
!
" " # $
makeInstance() *
8+ ToplevelClass
NonStaticMemberClass new # *9+&
"
# makeInstance() new
*
9+ this " # $
" ) this
&
makeInstance() *
.9+ # )
NonStaticMemberClass # ) topRef )
NonStaticMemberClass innerRef1 innerRef1
# )
# *
.:+
% #
new # # *
.=+
new ) " *
.-+
ToplevelClass.NonStaticMemberClass innerRef3 =
topRef.new NonStaticMemberClass(); // (17)
'!( # ( + , +
; #
% " # *
B+ # headlines
! "
( this 5
*
B+ #&
this.banner banner
) * this+ NonStaticMemberClass this.headlines #
) * this+ NonStaticMember Class headlines
" # &
"
" $.this
) * " $+
; " #
this "
" # # super
// Filename: Client2.java
class TLClass { // (1) TLC
5 &
------------
TLClass object aaa
TLClass object aaa : InnerB object bbb
TLClass object aaa : InnerB object bbb : InnerC object ccc
," -= this
" new
" # InnerC
*
..+ # InnerB *:+ #
TLClass *
.+ % private String
id printId
"
!
this # *
B+ *
.:+ *
.=+ *
.B+ *
7C+ InnerC
# id ( &
System.out.println(id); // (17)
System.out.println(this.id); // (17a)
System.out.println(InnerC.this.id); // (17b)
main() *
78+ " new )
# ) % InnerC
* c+ *7-+ " InnerB * b+
# # *7:+ " TLClassA * a+ #
# *
79+ c *
7?+ printId()
*
.9+ InnerC id )
# InnerC
* + new
# *
8.+ *
8:+
' * + ) # c cc
ccc @#
c d ) #
! " % * +
* +# " 0
#
"
," -- this
# *
9+ # super #
" this
# # *
:+
, . , !
class Superclass {
protected double x = 3.0e+8;
}
5 &
this.x: 3.0E8
TopLevelClass.this.x: 3.14
" # "
," -?
) "
# "
*
=+ *-+& InnerB OuterB " InnerA
OuterA InnerA OuterB OuterA
) OuterB ) InnerA
) " *B+
OuterB )
InnerB InnerB
InnerA super() OuterB ) #
/ !
Review Questions
# # D
class Outer {
private int secret;
Outer() { secret = 123; }
class Inner {
int getSecret() { return secret; }
}
# Inner #
Outer
# createInner()
# ) Inner Outer
# secret
getSecret()
# getSecret()
main() MyClass
# # # 123 #
# D
# #
; "
% # # D
class Memento {
int val;
# main() #
State
# State.Memento
main()
# Memento
# State
# 11 18 11 #
& # # D
class A {
int val;
A(int v) { val = v; }
}
class B extends A {
int val = 1;
B() { super(2); }
class C extends A {
int val = 3;
C() {
super(4);
System.out.println(B.this.val);
System.out.println(C.this.val);
System.out.println(super.val);
}
}
}
# # 2 3 4, #
# # 1 4 2 #
# # 1 3 4 #
# # 3 2 1 #
) # D
# #
Inner Outer.Inner
" this #
% #
#
@# "*
< +
( )
@# # # static
@# final #
," -B * .+ *
7+ NonStaticLocal StaticLocal
*..+ *
.7+
" # )
0 !
class Base {
protected int nsf1;
}
class TLCWithLocalClasses { // Top level Class
private double nsf1; // Non-static field
private int nsf2; // Non-static field
private static int sf; // Static field
% final # *
:+ *
.:+
$
% *
.C+ *7C+ hlv
#
% # nsf1
Base NonStaticLocal
NonStaticLocal # *
=+ *=+ *
=+ >
this super #
# *.=+ *
.= + *.= +
nsf1
TLCWithLocalClasses this
#
@# this #
*
.-+ )
%
nsf2 sf
TLCWithLocalClasses NonStaticLocal *
?+ *
B+
this
@#
static sf TLCWithLocalClasses StaticLocal
*
.B+ nsf1 # *
.?+
%
)
1 !2
5 &
1 (
createCircle()
# *
..+ !
"
*
=+
%
% # createMap()
# *
.7+ *
.8+ % " )
% "
draw() )
*
.9+ # ) # !
final radius createCircle() *9+ draw()
Circle *:+ % Circle *
..+
createCircle() draw()
Circle *.9+ final radius
draw() createCircle() #
E final
#
," -.C # !
% # # " # #
# *
:.C 7.?+ # (
# ; " # #
# #
Auditor *
7+
' final #
# check() *
9+
< # # Auditor ) #
*
:+
class Account {
int balance;
/** (2) Local class to save the necessary data and to check
that the transaction was valid. */
class Auditor {
% " #
* " ) +%
) " return
< %
F0!
" #
static
5 #
' extends
*
+ < 5
final
! (
5 &
// ...
class Shape implements IDrawable { // (2)
public void draw() { System.out.println("Drawing a Shape."); }
}
}
// ...
Implementing an Interface
# "
" $&
%
" Object ' implements
" "
% # # $ ,"
-.. createIDrawable() *
-+ *?+ #
IDrawable draw()
)
Object * +
# " F0!
*
.+ ActionListener
actionPerformed() addActionListener() F0!
quitButton )
addActionListener() F0!
actionPerformed() ActionListener )
quitButton.addActionListener(
new ActionListener() { // (1) Anonymous class implements interface.
// Invoked when the user clicks the quit button.
public void actionPerformed(ActionEvent evt) {
System.exit(0); // (2) Terminates the program.
}
}
);
# ,"
-.. %
" Base
% final " !
"
" $.this '
" #
# ! !
class Base {
protected int nsf1;
}
Review Questions
- D
' public
3 static
% static
# # D
//----(1)----
IntHolder makeIntHolder(int i) {
return new IntHolder() {
public int getInt() { return i; }
};
}
//----(2)----
IntHolder makeIntHolder(final int i) {
return new IntHolder {
public int getInt() { return i; }
};
}
//----(3)----
IntHolder makeIntHolder(int i) {
class MyIH implements IntHolder {
public int getInt() { return i; }
}
return new MyIH();
}
//----(4)----
IntHolder makeIntHolder(final int i) {
class MyIH implements IntHolder {
public int getInt() { return i; }
}
return new MyIH();
}
//----(5)----
IntHolder makeIntHolder(int i) {
return new MyIH(i);
}
static class MyIH implements IntHolder {
final int j;
MyIH(int i) { j = i; }
public int getInt() { return j; }
}
# #
*
.+
*
7+
*
8+
*
9+
*
:+
/ D
# #
! # Outer
# "Outer.this
Outer
% final
! objRef # Outer
" (objRef instanceof Outer) # true
0 D
static
1 static
static
% static
' static
Chapter Summary
# # &
&
&
" #
# " #
# "
G # H.new "
" G
H.this "
"
" "
Programming Exercise
," =7
PrintFunc Print