下面的代码是一个封装的代码,在初学的过程中有几个疑问:(请不要说set,get其实就是一个名字而已,这个我知道,请就题论题)
1.本代码中set方法有什么作用,是不是对对象的参数进行限制,就题论题,就像get方法我知道当我创建的对象调用它时,他可以返回值?
2.在无参构造中使用this(0.0,"没有名字")实质是什么,this()是什么意思?
3.请根据封装的定义,结合我的代码,简要说一下这个代码封装体现在哪?
4.我能否如此理解此代码:首先,程序从主函数开始执行,创建一个对象,由于“Ball ball1 = new Ball()”无参数,所以无参构造可以对此对象附初值,由于没有参数,所以不执行set方法,直接用ball1调用get方法输出即可。
    然后我创建一个对象“Ball ball2 = new Ball(2.0,"hongqiu");”程序先分别将参数2.0和“hongqiu”传入setRadius()和setName()方法中,假如我的set方法中有限制条件,即可对参数进行判断。如果没有限制条件,正如我下面的代码,就将我的两个参数赋给域变量,此时我的问题出现了,我不知道程序是先执行set方法呢,还是先执行构造以得到对象的初始值。即  public Ball(double radius ,String name){
  this.radius = radius;
  this.name = name;
}
和public void setRadius(double radius){
        this.radius = radius;
    }
    public void setName(String name){
        this.name = name;
    }中的this.radius = radius;
         this.name = name;
分别是什么意思,我很困惑。
public class Ball {
//我写一个Ball的规范
private double radius;
private String name;
public Ball(){
this(0.0,"没有名字");
}
public Ball(double radius ,String name){
this.radius = radius;
this.name = name;
}
public double getRadius(){
return this.radius;
}
public String getName(){
return this.name;
}
public void setRadius(double radius){
this.radius = radius;
}
public void setName(String name){
this.name = name;
}
}
public class Balldemo {
public static void main(String[] args) {
Ball ball1 = new Ball();
System.out.print("名称:"+ball1.getName());
System.out.println();
System.out.print("半径:"+ball1.getRadius());
Ball ball2 = new Ball(2.0,"hongqiu");
System.out.println();
System.out.print("名称:"+ball2.getName());
System.out.println();
System.out.print("半径:"+ball2.getRadius()); }}

解决方案 »

  1.   

    所谓封装就是把一个类的属性值设置不允许直接对它更改,与访问,因为直接对它访问与更改不安全,但有时候必须得对其值进行更改与访问,那就统一提供一个方法更改用set方法,访问用get方法,这样做也方便维护,控制。以后要修改也只要改一个地方就可以控制全部。
      

  2.   

    1、作用:类变量可写
    2、this:本类对象引用
    3、体现在:
    private double radius;
    public double getRadius(){
    return this.radius;
    }
    public void setRadius(double radius){
    this.radius = radius;
    }
    4、执行一次输出点信息就知道先执行谁了
    5、this.radius = radius;前者类变量,后者参数
      

  3.   

    2. this()--指类自己的构造方法,this(0.0,"没有名字")--调用构造方法Ball(double radius ,String name)
       
    4.Ball ball1 = new Ball()--调用无参构造方法,在无参构造方法内调用有参构造方法为属性赋值。不是因为没有参数,不执行set方法,是因为在代码里没有调用set方法所以不执行。对象创建完成后,可以用set方法给对象重写赋值,用get方法取得对象值。Ball ball2 = new Ball(2.0,"hongqiu")--只执行构造方法中的代码:this.radius = radius;this.name = name;,不会调用set方法,除非你在构造方法中写成setRadius(radius);setName(name)才会调用set方法,