请教怎么在父类中创建三个不同的形状对象,放在Shape类型的数组里,分别打印出每个对象的周长和面积
请问如何在父类中创建三个不同的形状对象,放在Shape类型的数组里,分别打印出每个对象的周长和面积
package extend;
public class Shape {
public static void main(String[] args) {
Shape ss[] = new Shape[3];
Shape s = new Rect(3,3);
//System.out.println( s.getMianji() + s.getZhouchang());
Shape s1= new Circle(3);
Shape s2 = new Square(4, 0);
}
}
package extend;
public class Rect extends Shape{
double length;
double width;
public Rect( double length , double width){
this.length = length;
this.width = width;
}
public double getLength() {
return length;
}
public void setLength(double length) {
this.length = length;
}
public double getWidth() {
return width;
}
public void setWidth(double width) {
this.width = width;
}
public double getMianji(double length , double width){
return length * width;
}
public double getZhouchang(double length , double width){
return (length + width) * 2;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
}
}
package extend;
public class Circle extends Shape {
double banjing;
public Circle(double banjing){
this.banjing = banjing;
}
public double getBanjing() {
return banjing;
}
public void setBanjing(double banjing) {
this.banjing = banjing;
}
public double getZhouchang(double banjing){
return Math.PI * banjing * 2;
}
public double getMianji(double banjing){
return Math.PI * banjing * banjing;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
}
}
------解决思路----------------------
图形基类。这是一个抽象类,约束了其子类必须实现计算周长和面积的方法。
圆形类。
矩形类。
测试类。
------解决思路----------------------
为什么rect类中private double mianji要使用private?
面向对象的开放封闭原则,这里用private意思就是说mianji只能通过计算得到,除此之外都不能变化mianji的值。目的就是保证长宽和面积匹配,不会发生长宽是5和6的时候面积被别人搞成30以外的情况。
中 calc()是什么?-----------calculate的缩写,计算的意思
父类中设置对象可以调用子类方法输出吗?------------------------分场合,一般不建议父类显式调用子类的方法。
PS:英文好好学
------解决思路----------------------
这不是java编程思想中的例子吗,你去看下吧
package extend;
public class Shape {
public static void main(String[] args) {
Shape ss[] = new Shape[3];
Shape s = new Rect(3,3);
//System.out.println( s.getMianji() + s.getZhouchang());
Shape s1= new Circle(3);
Shape s2 = new Square(4, 0);
}
}
package extend;
public class Rect extends Shape{
double length;
double width;
public Rect( double length , double width){
this.length = length;
this.width = width;
}
public double getLength() {
return length;
}
public void setLength(double length) {
this.length = length;
}
public double getWidth() {
return width;
}
public void setWidth(double width) {
this.width = width;
}
public double getMianji(double length , double width){
return length * width;
}
public double getZhouchang(double length , double width){
return (length + width) * 2;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
}
}
package extend;
public class Circle extends Shape {
double banjing;
public Circle(double banjing){
this.banjing = banjing;
}
public double getBanjing() {
return banjing;
}
public void setBanjing(double banjing) {
this.banjing = banjing;
}
public double getZhouchang(double banjing){
return Math.PI * banjing * 2;
}
public double getMianji(double banjing){
return Math.PI * banjing * banjing;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
}
}
------解决思路----------------------
图形基类。这是一个抽象类,约束了其子类必须实现计算周长和面积的方法。
public abstract class Shape {
public abstract double getMianji();
public abstract double getZhouchang();
}
圆形类。
public class Circle extends Shape {
double banjing;
public Circle(double banjing) {
this.banjing = banjing;
}
public double getBanjing() {
return banjing;
}
public void setBanjing(double banjing) {
this.banjing = banjing;
}
@Override
public double getZhouchang() {
return Math.PI * banjing * 2;
}
@Override
public double getMianji() {
return Math.PI * banjing * banjing;
}
}
矩形类。
public class Rect extends Shape {
double length;
double width;
private double mianji;
private double zhouchang;
public Rect(double length, double width) {
this.length = length;
this.width = width;
calc();
}
public double getLength() {
return length;
}
public void setLength(double length) {
this.length = length;
calc();
}
public double getWidth() {
return width;
}
public void setWidth(double width) {
this.width = width;
calc();
}
//当某个计算结果会被频繁使用时,而不会频繁变化时,可以
//在其相关量变化时更新,并保存,用牺牲内存减少计算量
private void calc(){
this.mianji = this.length * this.width;
this.zhouchang = 2*(this.length + this.width);
}
@Override
public double getMianji() {
return this.mianji;
}
@Override
public double getZhouchang() {
return this.zhouchang;
}
}
测试类。
/**
* 测试类。
* @author zys59三仙半(QQ:597882752)
* 创建时间:2015年5月20日 上午8:45:14
*/
public class TestShape {
public static void main(String[] args) {
Shape [] shapes = new Shape[3];
shapes[0] = new Circle(10);
shapes[1] = new Rect(10, 20);
shapes[2] = new Circle(1);
Shape shape;
for (int i = 0; i < shapes.length; i++) {
shape = shapes[i];
System.out.println(i+":周长="+shape.getZhouchang()+", 面积="+shape.getMianji());
}
}
}
------解决思路----------------------
为什么rect类中private double mianji要使用private?
面向对象的开放封闭原则,这里用private意思就是说mianji只能通过计算得到,除此之外都不能变化mianji的值。目的就是保证长宽和面积匹配,不会发生长宽是5和6的时候面积被别人搞成30以外的情况。
中 calc()是什么?-----------calculate的缩写,计算的意思
父类中设置对象可以调用子类方法输出吗?------------------------分场合,一般不建议父类显式调用子类的方法。
PS:英文好好学
------解决思路----------------------
这不是java编程思想中的例子吗,你去看下吧