关于封装,构造函数,this关键字

私有仅仅是封装的一种体现形式,凡是私有的都可以算封装。

//setAge(),和getAge()方法,其中对Person()类中age进行封装

class Demo19
 {
  public static void main(String[] args)
  {
   Person a1=new Person();
   a1.setAge(0);//设置年龄
   a1.run();
   
  }
   
 }class Person
 {
  private int age;//age私有,进行封装
  public void setAge(int a)
  {
   if(a>0&&a<130)
    this.age=a;
   else
    System.out.println("年龄非法");
  }
  public int getAge()
  {
   return this.age;
  } public void run()
  {
   System.out.println("年龄="+this.age); 
  }
  
 }


---------------------------
构造函数

将构造函数私有化,这样其他程序就无法创建该类的对象了。
例如:将功能类的构造函数私有化,功能方法静态修饰

类中的方法是静态就不需要创建对象了,所以本类中就可以将构造函数私有化private

  1.构造函数和类名相同,不用定义返回值,没有具体的返回值
  2.每一个对象是个实体,实体用构造函数进行初始化后才可以使用
  3.任何类都有默认的构造函数
  4.对象一创建就调用构造函数,一般函数只有对象创建完成后,所需时才会被调用
  5.构造函数只能被执行一次,一般函数可以执行多次
  6.描述事物时候一开始就存在的属性和行为,那么就用构造函数定义

class Demo20
 {
  public static void main(String[] args)
  {
    // Person 明确要创建Person类的对象
    // new是开辟空间的关键字.
    // ()需要通过哪个构造函数进行初始化。
   Person p=new Person();
   p.speak();
   
  }
 }
 class Person
 {
  //指定构造函数后没有系统默认的构造函数,如果不指定就有系统默认的构造函数Person(){}
  Person()
  {
   /**
   if(……)
    return……
   */
   System.out.println("person run");
   //构造函数中也有return语句,用来控制结束初始化
  }
  public void speak()
  {
   System.out.println("speak");
  }
 }

-------------------------

//多个构造函数,多个初始化
 //一般函数调用可以用this.函数()
 //构造函数之间的调用可以使用this(指定具体实参明确要调用的构造函数)
 class Demo20
 {
  public static void main(String[] args)
  {
   Person p=new Person("lisi");
   p.information();
   Person p1=new Person("wangwu",20);
   p1.information();
   Person p2=new Person("zhangsan",20);
   p2.information();
   System.out.println(p2.compareAge(p1));
  }
 }
 class Person
 {
  private String name;
  private int age;
  //构造函数
  //当一个类中存在着多个构造函数时候,
  //他们的存在形态是重载 Person()
  {
   System.out.println("person run");
  }
  Person(String name)
  {
   //构造函数调用,不能用this.被调用函数();
   this();
   this.name=name;
   //可用this(name);
  }
  Person(String name,int age)
  {
   this.name=name;
   this.age=age;
  }
   public void setName(String name)
  {
   this.name=name;
  }
  public String getName()
  {
   return this.name;
  }
  public void information()
  {
   System.out.println(name+":"+age);
  }
  public void show()
  {
   //用this调用information()函数
   this.information();
  }
  //和任意一个Person对象比较其中的年龄
  public boolean compareAge(Person p)
  {
   return p.age==this.age;
  }
 }