package Cycle1;
public class Application {
public static void main(String[] args) {
Cycle bi = new Bicycle();
bi.ride();
Cycle tr = new Tricycle();
tr.ride();
((Tricycle) tr).run();
Cycle un = new Unicycle();
un.ride();
}
}
练习3:
package Eshape;
public class Circle extends Shape {
@Override
public void draw() {
System.out.println("Circle.draw()");
}
@Override
public void erase() {
System.out.println("Circle.erase()");
}
@Override
public void printf() {
System.out.println("Circle Print");
}
}
练习4:一样
练习5:
package Cycle1;
import java.util.Random;
public class Cycle {
public int wheels(){
Random w = new Random();
return w.nextInt(4);
}
public void ride(){
System.out.println("Ride");
System.out.println(wheels());
}
}
练习9:
package Cycle1;
class Rodent{
public void hop(){
System.out.println("Rodent hopping");
}
public void scurry(){
System.out.println("Rodent scurrying");
}
public void reproduce(){
System.out.println("Making more Rodents");
}
@Override
public String toString() {
return "Rodent{}";
}
}
class Mouse extends Rodent{
@Override
public void hop() {
System.out.println("Mouse1");
}
@Override
public void scurry() {
System.out.println("Mouse2");
}
@Override
public void reproduce() {
System.out.println("Mouse3");
}
@Override
public String toString() {
return "Mouse{}";
}
}
class Gerbil extends Rodent{
@Override
public void hop() {
System.out.println("Gerbil1");
}
@Override
public void scurry() {
System.out.println("Gerbil2");
}
@Override
public void reproduce() {
System.out.println("Gerbil3");
}
@Override
public String toString() {
return "Gerbil{}";
}
}
class Hamster extends Rodent{
@Override
public void hop() {
System.out.println("Hamster1");
}
@Override
public void scurry() {
System.out.println("Hamster2");
}
@Override
public void reproduce() {
System.out.println("Hamster3");
}
@Override
public String toString() {
return "Hamster{}";
}
}
public class E09 {
public static void main(String[] args) {
Rodent[] rodents = {
new Mouse(),new Gerbil(),new Hamster(),
};
for (Rodent r :
rodents) {
r.hop();
r.scurry();
r.reproduce();
r.toString();
}
}
}
练习10:
package Cycle1;
class TwoMethods{
public void m1(){
System.out.println("Inside m1,calling m2");
m2();
}
public void m2(){
System.out.println("Inside m2");
}
}
class Inherited extends TwoMethods{
@Override
public void m2() {
System.out.println("Inside Inherited m2");
}
}
public class E10 {
public static void main(String[] args) {
TwoMethods x = new Inherited();
x.m1();
}
}
class Pickle{
Pickle() {
System.out.println("Pickle");
}
}
class Sandwich2 extends PortableLunch{
Bread b = new Bread();
Cheese c = new Cheese();
Lettuce l = new Lettuce();
Pickle p = new Pickle();
Sandwich2(){
System.out.println("Sandwich");
}
}
public class E11 {
public static void main(String[] args) {
new Sandwich2();
}
}
class Member{
public Member(String id) {
System.out.println("Member constructor " + id);
}
}
class Rodent2{
Member m1 = new Member("r1"),m2 = new Member("r2");
public Rodent2() {
System.out.println("Rodent constructor");
}
public void hop(){
System.out.println("Rodent hopping");
}
public void scurry(){
System.out.println("Rodent scurry");
}
public void reproduce(){
System.out.println("Making more Rodents");
}
@Override
public String toString() {
return "Rodent";
}
}
class Mouse2 extends Rodent2{
Member m1 = new Member("m1"),m2 = new Member("m2");
public Mouse2() {
System.out.println("Mouse constructor");
}
@Override
public void hop() {
System.out.println("Mouse1");
}
@Override
public void scurry() {
System.out.println("Mouse2");
}
@Override
public void reproduce() {
System.out.println("Mouse3");
}
@Override
public String toString() {
return "Mouse{}";
}
}
class Gerbil2 extends Rodent2{
Member m1 = new Member("g1"), m2 = new Member("g2");
@Override
public void hop() {
System.out.println("Gerbil1");
}
@Override
public void scurry() {
System.out.println("Gerbil2");
}
@Override
public void reproduce() {
System.out.println("Gerbil3");
}
@Override
public String toString() {
return "Gerbil{}";
}
}
class Hamster2 extends Rodent2{
Member m1 = new Member("h1"), m2 = new Member("h2");
public Hamster2() {
System.out.println("Hamster constructor");
}
@Override
public void hop() {
System.out.println("Hamster1");
}
@Override
public void scurry() {
System.out.println("Hamster2");
}
@Override
public void reproduce() {
System.out.println("Hamster3");
}
@Override
public String toString() {
return "Hamster{}";
}
}
public class E12 {
public static void main(String[] args) {
new Hamster2();
}
}
练习13:(不会)
class Shared{
private int refcount = 0;
private static long counter = 0;
private final long id = counter++;
public Shared() {
System.out.println("Creating" + this);
}
public void addRef(){
refcount++;
}
protected void finalize(){
if (refcount != 0)
System.out.println("Error");
}
protected void dispose(){
if (--refcount == 0){
System.out.println("Disposing " + this);
}
}
@Override
public String toString() {
return "Shared " + id;
}
}
class Composing{
private Shared shared;
private static long counter = 0;
private final long id = counter++;
public Composing(Shared shared) {
System.out.println("Creating " + this);
this.shared = shared;
this.shared.addRef();
}
protected void dispose(){
System.out.println("disposing" + this);
shared.dispose();
}
@Override
public String toString() {
return "Composing{" +
+ id +
'}';
}
}
public class ReferenceCounting {
public static void main(String[] args) {
Shared shared = new Shared();
Composing[] composing = {
new Composing(shared),
new Composing(shared),
new Composing(shared),
new Composing(shared),
new Composing(shared),
new Composing(shared),
new Composing(shared),
};
for (Composing c :
composing) {
c.dispose();
}
System.gc();
new Composing((new Shared()));
System.gc();
}
}
练习14:(不会)
class RectangularGlyph extends Glyph{
private int width = 4;
private int height = 5;
public RectangularGlyph(int width, int height) {
this.width = width;
this.height = height;
System.out.println("RectangularGlyph.RectangularGlyph(), width = " + width + ", height = " + height);
}
void draw(){
System.out.println("RectangularGlyph.draw(), area = " + width * height);
}
}
public class E15 {
public static void main(String[] args) {
new RoundGlyph(5);
new RectangularGlyph(2,2);
}
}
引用,此引用可以指示三种不同的状态。纳入一些可以改变这些状态的方法。
class AlertStatus{
public String getStatus(){return "None";}
}
class RedAlertStatus extends AlertStatus{
public String getStatus(){return "Red";}
}
class YelloAlertStatus extends AlertStatus{
public String getStatus(){return "Yello";}
}
class BlueAlertStatus extends AlertStatus{
public String getStatus(){return "Blue";}
}
class Starship{
private AlertStatus status = new BlueAlertStatus();
public void setStatus(AlertStatus istatus){
status = istatus;
}
@Override
public String toString() {
return status.getStatus();
}
}
public class E16 {
public static void main(String[] args) {
Starship eprise = new Starship();
System.out.println(eprise);
eprise.setStatus(new RedAlertStatus());
System.out.println(eprise);
eprise.setStatus(new YelloAlertStatus());
System.out.println(eprise);
}
}
package Cycle1;
public class Application {
public static void main(String[] args) {
Cycle bi = new Bicycle();
bi.ride();
((Bicycle) bi).balance();
Cycle tr = new Tricycle();
tr.ride();
//((Bicycle)tr).balance();
Cycle un = new Unicycle();
un.ride();
((Unicycle) un).balance();
}
}