package Chapter10;
public class Outer {
class Inner{
}
public Inner inner() {
return new Inner();
}
public static void main(String[] args) {
Outer o = new Outer();
Inner i = o.inner();
}
}
没有使用迭代器模式。。。可以参考http://blog.csdn.net/qq_35396447/article/details/52541547?locationNum=2&fps=1
package Chapter10;
public class Sequence {
private StringItem[] items;
private int next = 0;
public Sequence(int size) {
items = new StringItem[size];
}
public void add(StringItem st) {
if(nextpublic StringItem getStringItem(String item) {
return new StringItem(item);
}
class StringItem{
String item;
public StringItem(String item) {
this.item = item;
}
public String toString() {
System.out.println( item.toString());
return item.toString();
}
}
public static void main(String[] args) {
Sequence s = new Sequence(10);
s.add(s.getStringItem("si0"));
s.add(s.getStringItem("si1"));
s.add(s.getStringItem("si2"));
s.add(s.getStringItem("si3"));
s.add(s.getStringItem("si4"));
s.add(s.getStringItem("si4"));
s.add(s.getStringItem("si4"));
for(int i=0;iif(s.items[i]!=null)
s.items[i].toString();
}
}
}
package Chapter10;
public class Outer {
private String str;
public Outer(String str) {
this.str =str;
}
class Inner{
public String toString() {
System.out.println(str);
return super.toString();
}
}
public Inner inner() {
return new Inner();
}
public static void main(String[] args) {
Outer o = new Outer("Outer");
Inner i = o.inner();
i.toString();
}
}
注释部分
package Chapter10;
interface Selector{
boolean end();
Object current();
void next();
}
public class Sequence {
private Object[] items;
private int next = 0;
public Sequence(int size) {
items = new Object[size];
}
public void add(Object o) {
if(nextpublic Selector selector() {
return new SequenceSelector();
}
private class SequenceSelector implements Selector {
private int i = 0;
public Sequence getSequence() { //外部类名字.this
return Sequence.this;
}
public boolean end() {
return i == items.length;
}
public Object current() {
return items[i];
}
public void next() {
if (i < items.length) {
i++;
}
}
}
public static void main(String[] args) {
Sequence s = new Sequence(10);
for(int i=0;i<10;i++) {
s.add(Integer.toString(i));
}
Selector ss = s.selector();
while(!ss.end()) {
System.out.print(ss.current()+" ");
ss.next();
}
}
}
package Chapter10;
public class Exercise5 {
public static void main(String[] args) {
class1 c1 = new class1();
class1.Inner ci = c1.new Inner();
}
}
class class1{
class Inner{
}
}
protected的类需要有一个public的构造器,第三个包才能创建这个类。以上是全部发现,不是很清楚这个题想要干嘛。。
package Chapter10.exercise6.pakage1;
public interface Interface1 {
void f();
}
package Chapter10.exercise6.pakage2;
import Chapter10.exercise6.pakage1.Interface1;
public class Class {
protected class ProtectedClass implements Interface1{
public ProtectedClass() {
// TODO Auto-generated constructor stub
}
public void f() {
// TODO Auto-generated method stub
}
}
}
package Chapter10.exercise6.pakage3;
import Chapter10.exercise6.pakage1.Interface1;
import Chapter10.exercise6.pakage2.Class;
public class Class3 extends Class{
public ProtectedClass getProtectedClass() {
//return this.new ProtectedClass();
return new ProtectedClass();
}
}
内部类可以修改外部类的私有成员并且可以调用其方法。
package Chapter10;
public class Exercise7 {
private int i=0;
private void f() {
i++;
System.out.println("i="+i);
}
void f1() {
Inner in = new Inner();
in.modify();
}
class Inner{
void modify() {
i++;
System.out.println(" i="+i);
f();
}
}
public static void main(String[] args) {
Exercise7 e = new Exercise7();
//e.f();
e.f1();
}
}
在7的基础上 增加加了注释的两行代码。
package Chapter10;
public class Exercise7 {
private int i=0;
private void f() {
i++;
System.out.println("i="+i);
//a++; 报错
}
void f1() {
Inner in = new Inner();
in.modify();
in.a++;//通过, 说明不能直接访问 但是可以通过 内部类的引用调用其private的变量
}
class Inner{
private int a=0;
void modify() {
i++;
System.out.println(" i="+i);
f();
}
}
public static void main(String[] args) {
Exercise7 e = new Exercise7();
//e.f();
e.f1();
}
}
package Chapter10;
interface Interface{
void f();
}
public class Exercise9 {
public Interface Method() {
class Inner implements Interface {
@Override
public void f() {
System.out.println("f()");
}
}
return new Inner();
}
public static void main(String[] args) {
Exercise9 e = new Exercise9();
Interface a = e.Method();
a.f();
}
}
感觉和第九题没有区别啊。。。。。不懂。。
package Chapter10;
public class Exercise11 {
private class Inner implements Interface{
@Override
public void f() {
System.out.println("f()");
}
public void f2() {
}
}
Interface f1() {
Interface i = new Inner();
return i;
}
public static void main(String[] args) {
Exercise11 e= new Exercise11();
Interface i= e.f1();
//i.f2();
i.f();
}
}
匿名类的实现需要有一个接口或者其他的类作为其基类。
package Chapter10;
interface Inner{
void modify();
}
public class Exercise7 {
private int i=0;
private void f() {
i++;
System.out.println("i="+i);
//a++; 报错
}
public Inner f1() {
return new Inner(){
private int a=0;
public void modify() {
i++;
System.out.println(" i="+i);
f();
}
};
}
public static void main(String[] args) {
Exercise7 e = new Exercise7();
//e.f();
Inner i = e.f1();
i.modify();
}
}
package Chapter10;
interface Interface{
void f();
}
public class Exercise9 {
public Interface Method() {
return new Interface (){
@Override
public void f() {
System.out.println("f()");
}
};
}
public static void main(String[] args) {
Exercise9 e = new Exercise9();
Interface a = e.Method();
a.f();
}
}
package Chapter10;
public class Exercise14 {
public Monster getDangerousMonster() {
return new Monster() {
@Override
public void menace() {
System.out.println("menace");
}
public void destroy(){//扩展的方法
System.out.println("destroy");
}
};
}
public Lethal getVampire() {
return new Lethal() {
@Override
public void kill() {
System.out.println("kill");
}
public void drinkBlood(){
System.out.println("dringkBlood");
}
};
}
public static void main(String[] args) {
}
}
interface Monster{
void menace();
}
interface Lethal{
void kill();
}
package Chapter10;
public class Exercise15 {
private int i;
public Exercise15(int i) {
this.i = i;
System.out.println("i="+i);
}
static class Class2{
public Exercise15 f() {
return new Exercise15(5) {
};
}
}
public static Class2 x() {
Class2 c2 =new Class2();
return c2;
}
public static void main(String[] args) {
Class2 c2 = x();
Exercise15 e = c2.f();
}
}
package Chapter9;
interface Cycle{
void move();
}
interface CycleFactory{
Cycle getCycle();
}
class Unicycle implements Cycle{
public void move() {
System.out.println("Unicycle move!");
}
public static CycleFactory factory() {
return new CycleFactory() {
@Override
public Cycle getCycle() {
return new Unicycle();
}
};
}
}
//class UnicycleFactory implements CycleFactory{
//
//
// public Cycle getCycle() {
// return new Unicycle();
// }
//
//}
class Tricycle implements Cycle{
public void move() {
System.out.println("Tricycle move!");
}
public static CycleFactory factory() {
return new CycleFactory() {
@Override
public Cycle getCycle() {
return new Tricycle();
}
};
}
}
//class TricycleFactory implements CycleFactory{
//
//
// public Cycle getCycle() {
// return new Tricycle();
// }
//
//}
class Bicycle implements Cycle{
public void move() {
System.out.println("Bicycle move!");
}
public static CycleFactory factory() {
return new CycleFactory() {
@Override
public Cycle getCycle() {
return new Bicycle();
}
};
}
}
//class BicycleFactory implements CycleFactory{
//
//
// public Cycle getCycle() {
// return new Bicycle();
// }
//
//}
public class Cycles {
public static void moveCycle(CycleFactory cf) {
Cycle c = cf.getCycle();
c.move();
}
public static void main(String[] args) {
moveCycle(new Bicycle().factory());
moveCycle(new Tricycle().factory());
moveCycle(new Unicycle().factory());
}
}
package Chapter9;
import java.util.Random;
interface CoinAndDice{
void Throw();
}
interface CoinAndDiceFactory{
CoinAndDice getCoinAndDice();
}
class Coin implements CoinAndDice{
Random rand = new Random();
public void Throw() {
if(rand.nextInt(2)==0)
System.out.println("Coin:"+"head");
else
System.out.println("Coin:"+"tail");
}
public static CoinAndDiceFactory factory() {
return new CoinAndDiceFactory() {
@Override
public CoinAndDice getCoinAndDice() {
return new Coin();
}
};
}
}
//class CoinFactory implements CoinAndDiceFactory{
//
// public CoinAndDice getCoinAndDice() {
// return new Coin();
// }
//
//}
class Dice implements CoinAndDice{
Random rand = new Random();
public void Throw() {
System.out.println("Dice:"+(rand.nextInt(6)+1));
}
public static CoinAndDiceFactory factory() {
return new CoinAndDiceFactory() {
@Override
public CoinAndDice getCoinAndDice() {
return new Dice();
}
};
}
}
//class DiceFactory implements CoinAndDiceFactory{
//
// public CoinAndDice getCoinAndDice() {
// return new Dice();
// }
//
//}
public class CoinsAndDices {
public static void Throws(CoinAndDiceFactory cdf) {
CoinAndDice cd =cdf.getCoinAndDice();
cd.Throw();
}
public static void main(String[] args) {
Throws(new Coin().factory());
Throws(new Coin().factory());
Throws(new Coin().factory());
Throws(new Dice().factory());
Throws(new Dice().factory());
Throws(new Dice().factory());
}
}
package Chapter10;
public class Exercise18 {
public static class Inner{
}
public static void main(String[] args) {
Inner i = new Inner();
}
}
类的内部类的内部类不能直接创建需要下面一样通过第一个嵌套类来创建引用。
package Chapter10;
public class Exercise19 {
public static class Inner1{
public static class Inner2{
void f() {
System.out.println("f()");
}
}
}
public static void main(String[] args) {
Inner1.Inner2 i2 = new Inner1.Inner2(); //不能直接创建Inner2
i2.f();
}
}
package Chapter10;
public class Exercise20 implements includeInner{
public static void main(String[] args){
Test t = new Test();
t.f();
}
}
interface includeInner{
class Test {
public void f() {
System.out.println("f()");
}
}
}
package Chapter10;
public class Exercise20 implements includeInner{
public static void main(String[] args){
Test t = new Test();
t.f();
}
@Override
public void f1() {
// TODO Auto-generated method stub
}
}
interface includeInner{
void f1();
static class Test implements includeInner{
public static void f() {
new Test().f1();
}
@Override
public void f1() {
System.out.println("f1()");
}
}
}
package Chapter10;
interface Selector{
boolean end();
Object current();
void next();
}
public class Sequence {
private Object[] items;
private int next = 0;
public Sequence(int size) {
items = new Object[size];
}
public void add(Object o) {
if(nextpublic Selector selector() {
return new SequenceSelector();
}
public Selector reverseselector() {
class reverseSelector implements Selector{
private int i =items.length-1;
public Sequence getSequence() { //外部类名字.this
return Sequence.this;
}
public boolean end() {
return i == -1;
}
public Object current() {
return items[i];
}
public void next() {
if (i >=0) {
i--;
}
}
}
return new reverseSelector();
}
private class SequenceSelector implements Selector {
private int i = 0;
public Sequence getSequence() { //外部类名字.this
return Sequence.this;
}
public boolean end() {
return i == items.length;
}
public Object current() {
return items[i];
}
public void next() {
if (i < items.length) {
i++;
}
}
}
public static void main(String[] args) {
Sequence s = new Sequence(10);
for(int i=0;i<10;i++) {
s.add(Integer.toString(i));
}
Selector ss = s.selector();
Selector rs = s.reverseselector();
while(!ss.end()) {
System.out.print(ss.current()+" ");
ss.next();
}
while(!rs.end()) {
System.out.print(rs.current()+" ");
rs.next();
}
}
}
回调所有A的对象是什么意思。。。 没有看懂。。 后面哪个移除某些U的引用,,我感觉是第二个方法,可是我直接设置成移除所以,所以就不改了。。。
package Chapter10;
interface U{
void Method1();
void Method2();
void Method3();
}
class A{
U f() {
return new U() {
@Override
public void Method3() {
System.out.println("A.f().Method3");
}
@Override
public void Method2() {
System.out.println("A.f().Method2");
}
@Override
public void Method1() {
System.out.println("A.f().Method1");
}
};
}
}
class B{
U[] ua = new U[20];
void acceptU(U u) {
for(int i=0;iif(ua[i]==null) {
ua[i]=u;
break;
}
}
}
void setNull() {
for(int i=0;inull;
}
void callMethod() {
for(int i=0;iif(ua[i]!=null) {
System.out.println("ua["+i+"]");
ua[i].Method1();
ua[i].Method2();
ua[i].Method3();
}
}
}
public class Exercise23 {
public static void main(String[] args) {
A a1 = new A();
A a2 = new A();
A a3 = new A();
A a4 = new A();
A a5 = new A();
A a6 = new A();
A a7 = new A();
B b = new B();
b.setNull();
b.acceptU(a1.f());
b.acceptU(a2.f());
b.acceptU(a3.f());
b.acceptU(a4.f());
b.acceptU(a5.f());
b.acceptU(a6.f());
b.acceptU(a7.f());
b.callMethod();
// b.setNull();
// b.callMethod();
}
}
不是很懂这个Event的原理,然后整个程序也没怎么看懂。但是Event封装的很好,以至于不需要理解也可以添加其他想要添加的事件。
package Chapter10.controller;
import java.util.*;
public class Controller {
private List eventlist = new ArrayList();
public void addEvent(Event e) {
eventlist.add(e);
}
public void run() {
while(eventlist.size()>0) {
for(Event e: new ArrayList(eventlist))
if(e.ready()) {
System.out.println(e);
e.action();
eventlist.remove(e);
}
}
}
}
package Chapter10.controller;
public abstract class Event {
private long eventTime;
protected final long delayTime;
public Event(long delayTime) {
this.delayTime = delayTime;
start();
}
public void start() {
eventTime = System.nanoTime()+delayTime;
}
public boolean ready() {
return System.nanoTime() >= eventTime;
}
public abstract void action();
}
package Chapter10.controller;
import Chapter10.controller.*;
public class GreenhouseController {
public static void main(String[] args) {
GreenhouseControls gc = new GreenhouseControls();
gc.addEvent(gc.new Bell(900));
Event[] eventList = {
gc.new ThermostatNight(0),
gc.new LightOn(200),
gc.new LightOff(400),
gc.new WaterOn(600),
gc.new WaterOff(800),
gc.new ThermostatDay(1400),
gc.new Fan(300)
};
gc.addEvent(gc.new Restart(2000, eventList));
if(args.length==1)
gc.addEvent(new GreenhouseControls.Terminate(new Integer(args[0])));
gc.run();
}
}
package Chapter10.controller;
public class GreenhouseControls extends Controller{
private boolean fan = false;
public class Fan extends Event{
public Fan(long delayTime) {
super(delayTime);
}
@Override
public void action() {
if(fan == true) {
fan = false;
}else {
fan =true;
}
}
@Override
public String toString() {
if(fan==true) {
return "fan is on";
}else {
return "fan is off";
}
}
}
private boolean light = false;
public class LightOn extends Event{
public LightOn(long delayTime) {
super(delayTime);
}
@Override
public void action() {
light = true;
}
@Override
public String toString() {
return "Light is on";
}
}
public class LightOff extends Event{
public LightOff (long delayTime) {
super(delayTime);
}
@Override
public void action() {
light = false;
}
@Override
public String toString() {
return "Light is off";
}
}
private boolean water = false;
public class WaterOn extends Event{
public WaterOn(long delayTime) {
super(delayTime);
}
@Override
public void action() {
water = true;
}
@Override
public String toString() {
return "Greenhouse water is on";
}
}
public class WaterOff extends Event{
public WaterOff(long delayTime) {
super(delayTime);
}
@Override
public void action() {
water = false;
}
@Override
public String toString() {
return "Greenhouse water is off";
}
}
private String thermostat = "Day";
public class ThermostatNight extends Event{
public ThermostatNight(long delayTime) {
super(delayTime);
}
@Override
public void action() {
thermostat = "Night";
}
@Override
public String toString() {
return "ThermostatNight on night setting";
}
}
public class ThermostatDay extends Event{
public ThermostatDay(long delayTime) {
super(delayTime);
}
@Override
public void action() {
thermostat = "Day";
}
@Override
public String toString() {
return "ThermostatNight on day setting";
}
}
public class Bell extends Event{
public Bell(long delayTime) {
super(delayTime);
}
@Override
public void action() {
addEvent(new Bell(delayTime));
}
@Override
public String toString() {
return "Bing!";
}
}
public class Restart extends Event{
private Event[] eventList;
public Restart(long delayTime,Event[] eventList) {
super(delayTime);
this.eventList = eventList;
for(Event e : eventList)
addEvent(e);
}
@Override
public void action() {
for(Event e : eventList) {
e.start();
addEvent(e);
}
start();
addEvent(this);
}
@Override
public String toString() {
return "Restarting system";
}
}
public static class Terminate extends Event{
public Terminate(long delayTime) {
super(delayTime);
}
@Override
public void action() {
System.exit(0);
}
@Override
public String toString() {
return "Terminatsing";
}
}
}
package Chapter10.controller;
import Chapter10.controller.*;
public class GreenhouseController {
public static void main(String[] args) {
GreenhouseControls2 gc = new GreenhouseControls2();
gc.addEvent(gc.new Bell(900));
Event[] eventList = {
gc.new ThermostatNight(0),
gc.new LightOn(200),
gc.new LightOff(400),
gc.new WaterOn(600),
gc.new WaterOff(800),
gc.new Fan(300),
gc.new SprinklerOn(300),
gc.new SprinklerOff(400),
gc.new ThermostatDay(1400),
};
gc.addEvent(gc.new Restart(2000, eventList));
if(args.length==1)
gc.addEvent(new GreenhouseControls.Terminate(new Integer(args[0])));
gc.run();
}
}
package Chapter10.controller;
public class GreenhouseControls extends Controller{
private boolean fan = false;
public class Fan extends Event{
public Fan(long delayTime) {
super(delayTime);
}
@Override
public void action() {
if(fan == true) {
fan = false;
}else {
fan =true;
}
}
@Override
public String toString() {
if(fan==true) {
return "fan is on";
}else {
return "fan is off";
}
}
}
private boolean light = false;
public class LightOn extends Event{
public LightOn(long delayTime) {
super(delayTime);
}
@Override
public void action() {
light = true;
}
@Override
public String toString() {
return "Light is on";
}
}
public class LightOff extends Event{
public LightOff (long delayTime) {
super(delayTime);
}
@Override
public void action() {
light = false;
}
@Override
public String toString() {
return "Light is off";
}
}
private boolean water = false;
public class WaterOn extends Event{
public WaterOn(long delayTime) {
super(delayTime);
}
@Override
public void action() {
water = true;
}
@Override
public String toString() {
return "Greenhouse water is on";
}
}
public class WaterOff extends Event{
public WaterOff(long delayTime) {
super(delayTime);
}
@Override
public void action() {
water = false;
}
@Override
public String toString() {
return "Greenhouse water is off";
}
}
private String thermostat = "Day";
public class ThermostatNight extends Event{
public ThermostatNight(long delayTime) {
super(delayTime);
}
@Override
public void action() {
thermostat = "Night";
}
@Override
public String toString() {
return "ThermostatNight on night setting";
}
}
public class ThermostatDay extends Event{
public ThermostatDay(long delayTime) {
super(delayTime);
}
@Override
public void action() {
thermostat = "Day";
}
@Override
public String toString() {
return "ThermostatNight on day setting";
}
}
public class Bell extends Event{
public Bell(long delayTime) {
super(delayTime);
}
@Override
public void action() {
addEvent(new Bell(delayTime));
}
@Override
public String toString() {
return "Bing!";
}
}
public class Restart extends Event{
private Event[] eventList;
public Restart(long delayTime,Event[] eventList) {
super(delayTime);
this.eventList = eventList;
for(Event e : eventList)
addEvent(e);
}
@Override
public void action() {
for(Event e : eventList) {
e.start();
addEvent(e);
}
start();
addEvent(this);
}
@Override
public String toString() {
return "Restarting system";
}
}
public static class Terminate extends Event{
public Terminate(long delayTime) {
super(delayTime);
}
@Override
public void action() {
System.exit(0);
}
@Override
public String toString() {
return "Terminatsing";
}
}
}
class GreenhouseControls2 extends GreenhouseControls{
private boolean sprinkler = false;
public class SprinklerOn extends Event{
public SprinklerOn(long delayTime) {
super(delayTime);
}
@Override
public void action() {
sprinkler = true;
}
@Override
public String toString() {
return "Sprinkler is on";
}
}
public class SprinklerOff extends Event{
public SprinklerOff(long delayTime) {
super(delayTime);
}
@Override
public void action() {
sprinkler = false;
}
@Override
public String toString() {
return "Sprinkler is off";
}
}
}
package Chapter10;
class WithInner{
class Inner{
private int i;
public Inner(int i) {
this.i = i;
}
}
}
public class Exercise26 {
class Inner2 extends WithInner.Inner{
public Inner2(WithInner withInner, int i) {
withInner.super(i);
}
}0000000000000
public static void main(String[] args) {
// TODO Auto-generated method stub
}
}