练习
abstract class A{
abstract void print();
public A(){print();}
}
public class Ja9_1_3 extends A{
int i=5;
void print(){
System.out.println(i);
}
public static void main(String[] args){
Ja9_1_3 j=new Ja9_1_3();
j.print();
}
}
/*
*output:
0
5
* */
练习4:
import static net.mindview.util.Print.*;
abstract class Dad {}
class Son extends Dad {
protected void print() { System.out.println("Son"); }
}
abstract class SecondDad {
abstract protected void print();
}
class SecondSon extends SecondDad {
protected void print() { System.out.println("SecondSon"); }
}
public class Ja9_1_4 {
public static void testPrint(Dad d) {
((Son)d).print();//it's necessary
}
public static void secondTestPrint(SecondDad sd) {
sd.print();//don't need ((SecondSon)sd)
}
public static void main(String[] args) {
Son s = new Son();
Ja9_1_4.testPrint(s);
SecondSon ss = new SecondSon();
Ja9_1_4.secondTestPrint(ss);
}
}
练习5:
package net.mindview.util;
public interface Ja9_2_5b{
void first();
void second();
void third();
}
import net.mindview.util.Ja9_2_5b;
import static net.mindview.util.Print.*;
public class Ja9_2_5 implements Ja9_2_5b{
public void first(){print("first()");}
public void second(){print("second()");}
public void third(){print("third()");}
public static void main(String[] args){
Ja9_2_5 ja=new Ja9_2_5();
ja.first();
ja.second();
ja.third();
}
}
练习7:
import static net.mindview.util.Print.*;
public class Ja9_2_7{
public static void main(String[] args) {
Mouse m=new Mouse();
Gerbil[] gb={new Gerbil(m),new Gerbil(m),new Gerbil(m),new Gerbil(m),};
for(Gerbil g:gb){g.dispose();}
}
}
interface Rodent{
public void hop();
public void scurry();
public void reproduce();
public String toString();
}
class Mouse implements Rodent{
private static int refcount=0;
private static int count=0;
private final int id=count++;
public void refAdd(){refcount++;}
protected void dispose(){if(--refcount==0)print("Disposing "+this);}
public String toString(){return "Mouse "+id;}
public Mouse(){print("Creating "+this);}
public void hop() {System.out.println("Mouse hopping");}
public void scurry() {System.out.println("Mouse scurrying");}
public void reproduce() {System.out.println("Making more Mice");}
}
class Gerbil implements Rodent{
private static int count=0;
private final int id=count++;
private Mouse m;
public String toString(){return "Gerbil "+id;}
public Gerbil(Mouse m){this.m=m; m.refAdd(); print("Creating "+this);}
protected void dispose(){print("Disposing "+this);m.dispose();}
public void hop() {System.out.println("Gerbil hopping");}
public void scurry() {System.out.println("Gerbil scurrying");}
public void reproduce() {System.out.println("Making more Gerbil");}
}
class Hamster implements Rodent{
public void hop() {System.out.println("Hamster hopping");}
public void scurry() {System.out.println("Hamster scurrying");}
public void reproduce() {System.out.println("Making more Hamster");}
public String toString() {return "Hamster";}
}
练习8:
import static net.mindview.util.Print.*;
class Meal {
Meal() { print("Meal()"); }
}
class Bread {
Bread() { print("Bread()"); }
}
class Cheese {
Cheese() { print("Cheese()"); }
}
class Lettuce {
Lettuce() { print("Lettuce()"); }
}
class Lunch extends Meal {
Lunch() { print("Lunch()"); }
}
class PortableLunch extends Lunch {
PortableLunch() { print("PortableLunch()");}
}
interface FastFood{
void first();
void second();
void third();
}
public class Ja9_2_8 extends PortableLunch implements FastFood{
private Bread b = new Bread();
private Cheese c = new Cheese();
private Lettuce l = new Lettuce();
// public Sandwich() { print("Sandwich()"); }
public void first(){print("first()");}
public void second(){print("second()");}
public void third(){print("third()");}
public static void main(String[] args) {
Ja9_2_8 ja=new Ja9_2_8();
ja.first();ja.second();ja.third();
}
}
练习10:
import polymorphism.music.Note;
import static net.mindview.util.Print.*;
interface Playable{
void play(Note n); // Automatically public
}
interface Instrument {
int VALUE = 5; // static & final
void adjust();
}
class Wind implements Instrument,Playable{
public void play(Note n) {
print(this + ".play() " + n);
}
public String toString() { return "Wind"; }
public void adjust() { print(this + ".adjust()"); }
}
class Percussion implements Instrument,Playable{
public void play(Note n) {
print(this + ".play() " + n);
}
public String toString() { return "Percussion"; }
public void adjust() { print(this + ".adjust()"); }
}
class Stringed implements Instrument,Playable{
public void play(Note n) {
print(this + ".play() " + n);
}
public String toString() { return "Stringed"; }
public void adjust() { print(this + ".adjust()"); }
}
class Brass extends Wind {
public String toString() { return "Brass"; }
}
class Woodwind extends Wind {
public String toString() { return "Woodwind"; }
}
public class Ja9_2_10{
static void tune(Playable i) {
i.play(Note.MIDDLE_C);
}
static void tuneAll(Playable[] e) {
for(Playable i : e)
tune(i);
}
public static void main(String[] args) {
Playable[] orchestra = {
new Wind(),
new Percussion(),
new Stringed(),
new Brass(),
new Woodwind()
};
tuneAll(orchestra);
}
}
练习11:
import interfaces.interfaceprocessor.*;
import static net.mindview.util.Print.*;
import java.util.*;
class A {
public String name(){
return getClass().getSimpleName();
}
public String process(Object input){return (String)input;}
}
class AAdapter implements Processor{
A a;
public AAdapter(A a){
this.a=a;
}
public String name(){return a.name();}
public String process(Object input){return a.process(input);}
}
class B extends A{
public String process(Object input){
String m[]=((String)input).split(" ");
for(int i=0;i<m.length-1;i=i+2){String temp; temp=m[i];m[i]=m[i+1];m[i+1]=temp;}
return Arrays.toString(m);
}
}
public class Ja9_3_11{
public static void main(String[] args){
String s="Thinking in Java!";
Apply.process(new AAdapter(new B()),s);
}
}
/*Using Processor B
[in, Thinking, Java!]*/
练习12:
//: interfaces/Adventure.java
// Multiple interfaces.
interface CanClim{
void play();
}
interface CanFight {
void fight();
}
interface CanSwim {
void swim();
}
interface CanFly {
void fly();
}
class ActionCharacter {
public void fight() {}
public void play(){}
}
class Hero extends ActionCharacter
implements CanFight, CanSwim, CanFly, CanClim{
public void swim() {}
public void fly() {}
}
public class Ja9_3_12{
public static void t(CanFight x) { x.fight(); }
public static void u(CanSwim x) { x.swim(); }
public static void v(CanFly x) { x.fly(); }
public static void w(ActionCharacter x) { x.fight(); }
public static void p(CanClim x){x.play();}
public static void main(String[] args) {
Hero h = new Hero();
t(h); // Treat it as a CanFight
u(h); // Treat it as a CanSwim
v(h); // Treat it as a CanFly
w(h); // Treat it as an ActionCharacter
p(h);
}
} ///:~
练习13:
import static net.mindview.util.Print.*;
interface A{void aa();}
interface B extends A{void bb();}
interface C extends A{void cc();}
interface D extends B,C{void dd();} //extends can be variable
public class Ja9_3_13 implements D {
public void aa(){print("aa");}
public void bb(){print("bb");}
public void cc(){print("cc");}
public void dd(){print("dd");}
public static void main(String[] args){
Ja9_3_13 ja=new Ja9_3_13();
ja.aa();
ja.bb();
ja.cc();
ja.dd();
}
}
练习14:
import static net.mindview.util.Print.*;
interface A{void a1(); void a2();}
interface B{void b1(); void b2();}
interface C{void c1(); void c2();}
interface D extends A,B,C{void d();}
public class Ja9_5_14 implements D{
public void a1(){print("a1");}
public void a2(){print("a2");}
public void b1(){print("b1");}
public void b2(){print("b2");}
public void c1(){print("c1");}
public void c2(){print("c2");}
public void d(){print("d");}
public static void main(String[] args){
Ja9_5_14 ja=new Ja9_5_14();
ja.a1();
ja.a2();
ja.b1();
ja.b2();
ja.c1();
ja.c2();
ja.d();
}
}
练习15:
import static net.mindview.util.Print.*;
abstract class A{
abstract void a1();
abstract void a2();
abstract void b1();
abstract void b2();
abstract void c1();
abstract void c2();
abstract void d();
}
public class Ja9_5_15 extends A{
void a1(){print("a1");}
void a2(){print("a2");}
void b1(){print("b1");}
void b2(){print("b2");}
void c1(){print("c1");}
void c2(){print("c2");}
void d(){print("d");}
public static void main(String[] args){
Ja9_5_15 ja=new Ja9_5_15();
ja.a1();
ja.a2();
ja.b1();
ja.b2();
ja.c1();
ja.c2();
ja.d();
}
}
练习16:
import java.util.*;
import java.nio.*;
import static net.mindview.util.Print.*;
class RandomChars{
private static Random rd=new Random();
public char next(){return (char)(rd.nextInt(100)+2);}//the way to produce random between [2,100-2+1]; turn int to char
}
public class Ja9_6_16 extends RandomChars implements Readable{
private int count;
public Ja9_6_16(int count){this.count=count;}
public int read(CharBuffer cb){
if(count--==0){return -1;}
String result=Character.toString(next())+" ";// method next() can be inferred directly!
cb.append(result);
return result.length();
}
public static void main(String[] args){
Scanner s=new Scanner(new Ja9_6_16(7));
while(s.hasNext()){
print(s.next()+" ");//the difference between next() and nextInt()
}
}
}
PS:这一题明确了产生随机数的方法;明确了导出类可以直接调用基类的方法; Scanner的next()方法比nextInt()等方法更强大;Readable接口的read()方法会被Scanner反复调用直到返回值为-1;产生char的方法是产生int序列,再转型成char序列。
练习17:
import static net.mindview.util.Print.*;
interface A{
int a=1,b=2;
}
public class Ja9_7_17 implements A{
public static void main(String[] args){
print(a+" "+b);
//!a=2;
}
}
练习18:
import static net.mindview.util.Print.*;
interface Cycle{void produce();}
interface CycleFactory{Cycle getCycle();}
class Unicycle implements Cycle{public void produce(){print("it's Unicycle");}}
class Bicycle implements Cycle{public void produce(){print("it's Bicycle");}}
class Tricycle implements Cycle{public void produce(){print("it's Tricycle");}}
class UnicycleFactory implements CycleFactory{
public Cycle getCycle(){return new Unicycle();}
}
class BicycleFactory implements CycleFactory{
public Cycle getCycle(){return new Bicycle();}
}
class TricycleFactory implements CycleFactory{
public Cycle getCycle(){return new Tricycle();}
}
public class Ja9_9_18{
static void make(CycleFactory cf){
Cycle c=cf.getCycle();
c.produce();
}
public static void main(String[] args){
make(new UnicycleFactory());
make(new BicycleFactory());
make(new TricycleFactory());
}
}