public abstract class GeometricObject { private String color = "white"; private boolean filled; /** Construct a default geometric object */ protected GeometricObject() { } /** Construct a geometric object with specified properties */ protected GeometricObject(String color, boolean filled) { this.color = color; this.filled = filled; } /** Return color */ public String getColor() { return color; } /** Set a new color */ public void setColor(String color) { this.color = color; } /** Return filled. Since filled is boolean, so, the get method name is isFilled */ public boolean isFilled() { return filled; } /** Set a new filled */ public void setFilled(boolean filled) { this.filled = filled; } /** Abstract method findArea */ public abstract double findArea(); /** Abstract method findPerimeter */ public abstract double findPerimeter(); }public class Triangle extends GeometricObject {
private double side1,side2,side3; public double getSide1() { return side1; } public void setSide1(double side1) { this.side1 = side1; } public double getSide2() { return side2; } public void setSide2(double side2) { this.side2 = side2; } public double getSide3() { return side3; } public void setSide3(double side3) { this.side3 = side3; }
http://www.zxbc.cn/html/20080421/33538.html
写多态应注意以下三点:
1.有继承 2.有方法的重写 3. 有父类引用指向子类对象public class Animal{
public void who(){
system.out.println("动物");
}
}public class Bird extends Animal { //有继承
@overread //有重写
public void who(){
system.out.println("鸟");
}public class Cat extends Animal { //继承
@overread //重写
public void who(){
system.out.println("猫");
}
//下面是客户端
public class Client {
Animal animal = new Cat(); //父类引用指向子类对象
animal.who();
}
}
private String color = "white";
private boolean filled; /** Construct a default geometric object */
protected GeometricObject() {
} /** Construct a geometric object with specified properties */
protected GeometricObject(String color, boolean filled) {
this.color = color;
this.filled = filled;
} /** Return color */
public String getColor() {
return color;
} /** Set a new color */
public void setColor(String color) {
this.color = color;
} /** Return filled. Since filled is boolean,
so, the get method name is isFilled */
public boolean isFilled() {
return filled;
} /** Set a new filled */
public void setFilled(boolean filled) {
this.filled = filled;
} /** Abstract method findArea */
public abstract double findArea(); /** Abstract method findPerimeter */
public abstract double findPerimeter();
}public class Triangle extends GeometricObject {
private double side1,side2,side3; public double getSide1() {
return side1;
} public void setSide1(double side1) {
this.side1 = side1;
} public double getSide2() {
return side2;
} public void setSide2(double side2) {
this.side2 = side2;
} public double getSide3() {
return side3;
} public void setSide3(double side3) {
this.side3 = side3;
}
public Triangle(){
this(1.0,1.0,1.0);
}
public Triangle(double side1,double side2,double side3){
this.side1 = side1;
this.side2 = side2;
this.side3 = side3;
}
@Override
public double findArea() {
// TODO Auto-generated method stub
double temp = findPerimeter() / 2;
return Math.sqrt(temp * (temp - side1) * (temp - side2) * (temp - side3));
} @Override
public double findPerimeter() {
// TODO Auto-generated method stub
return side1 + side2 + side3;
} @Override
public String toString() {
return " Triangle side1=" + side1 + ", side2=" + side2 + ", side3="
+ side3;
}}public class TestTriangle { /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
GeometricObject triangle1 = new Triangle();
GeometricObject triangle2 = new Triangle(1,1.5,1);
triangle1.setColor("Yellow");
triangle1.setFilled(true);
triangle2.setColor("Yellow");
triangle2.setFilled(true);
System.out.println("Triangle1 Area:" + triangle1.findArea() + ",Perimeter:" + triangle1.findPerimeter() +
" Color:" + triangle1.getColor() + " IsFill:" + triangle1.isFilled() + triangle1.toString());
System.out.println("triangle2 Area:" + triangle2.findArea() + ",Perimeter:" + triangle2.findPerimeter() +
" Color:" + triangle2.getColor() + " IsFill:" + triangle2.isFilled() + triangle2.toString()); }}