class Point {
    private double x;
    private double y;
    Point(double x1, double y1) { 
     x = x1; 
     y = y1;
    }
    public double getX() { return x; }
    public double getY() { return y; }
    public void setX(double i) { x = i; }
    public void setY(double i) { y = i; }
}class Circle {
    private Point o;
    private double radius;
    Circle(Point p, double r) {
     o = p; 
     radius = r;
    }
    Circle(double r) {
        o = new Point(0.0, 0.0);
        radius = r;
    }
    
    boolean contains(Point p) {
     double x = p.getX() - o.getX();
     double y = p.getY() - o.getY();
     if(x*x + y*y > radius * radius) return false;
     else return true;
    }
    
    
    public void setO(double x, double y) {
        o.setX(x); 
        o.setY(y);
    }
    public Point getO() { return o; }
    public double getRadius() { return radius;}
    public void setRadius(double r) { radius = r;}
    public double area() { 
        return 3.14 * radius * radius;
    }
}public class TestCircle {
    public static void main(String args[]) {
        Circle c1 = new Circle(new Point(1.0,2.0), 2.0);
        Circle c2 = new Circle(5.0);
        System.out.println("c1:("+c1.getO().getX()+","
            +c1.getO().getY()+"),"+c1.getRadius());
        System.out.println("c2:("+c2.getO().getX()
            +","+c2.getO().getY()+"),"+c2.getRadius());
        System.out.println("c1 area = "+c1.area());
        System.out.println("c1 area = "+c2.area());
        c1.setO(5,6);
        c2.setRadius(9.0);
        System.out.println("c1:("+c1.getO().getX()+","
            +c1.getO().getY()+"),"+c1.getRadius());
        System.out.println("c2:("+c2.getO().getX()+","
            +c2.getO().getY()+"),"+c2.getRadius());
        System.out.println("c1 area = "+c1.area());
        System.out.println("c1 area = "+c2.area());
        
        Point p1 = new Point(5.2, 6.3);
        System.out.println(c1.contains(p1));
        System.out.println(c1.contains(new Point(10.0,9.0)));
        
    }
}
其实有时候不用也没有关系!

解决方案 »

  1.   

    不是构造函数....
    是设置函数...
    是为了数据的安全性啊
    不然你要设置话,就只能通过构造函数,而构造函数只在创建对象时调用.或者你要把私有变量设置成public才能更改...这样不好,怎么说呢,也不是特别不好,这是封装是否完整的问题
    设计上的要求
      

  2.   

    一句话 :
    java都这样,C++也这样,,,,,面向对象的都这样~~ 
      

  3.   

    个人觉得get/set挺方便的阿,比构造函数灵活多了
      

  4.   

    谢谢大家!那么在class Circle{}中哪个变量是局部哪个是全局?
      

  5.   

    看看书,就知道了,呵呵
    private Point o; 
        private double radius; 
     这两个就是全局的变量
      

  6.   

    楼主,我遇到了一道和你一样的题目:写一个MyPoint完全封装类,其中含有私有的int类型的x和y属性,分别用公有的getX和setX、getY和setY方法访问,定义一个toString方法用来显示这个对象的x、y的值,如显示(1, 2),如显示(1, 2),最后用main方法测试。
    //getX(),getY()获取鼠标位置。public class MyPoint
    {
     private int x,y;
     public int getX(){
      return x;
     }
     public int getY(){
      return y;
     }
     public void setX(int a){
       x=a;
     }
     public void setY(int b){
       y=b;
     }
     public String toString(){
      return "("+x+","+y+")";
      //System.out.println("("+x+","+y+")");
     }
     public static void main(String[] args) {
      // TODO Auto-generated method stub
      MyPoint point = new MyPoint();
      point.setX(2);
      point.setY(3);
      point.getX();
      point.getY();
      System.out.println(point);
      System.out.println(point.getX());
      System.out.println(point.getY());
      System.out.println(point.toString());
     }
    }