Java_类与对象2

封装性:

属性可以直接被类外部的对象掉用,这样的操作是不安全的。将内部的属性保护起来,不让外部调用,Java提供一个Private关键字。利用此关键字可实现封装。

class Person{

  private String name; //此变量只能被Person类使用,外部类无法调用

  private int age;

  public void tell(){

    System.out.println();

  }

}

需使用setter、getter取得封装性内容。

以private String name;封装属性为例:

  设置数据:public void setName(String n);

  取得数据:public void getName();

class Person{

  private String name; //此变量只能被Person类使用,外部类无法调用

  private int age;

  public void tell(){

    System.out.println();

  }

  public void setName(String n){

    name = n ;

  }

  public void setAge(int a){

    age = a ;

  }

  public String getName(){

    return name;

  }

  public int getAge(){

    return age;

  }

}

开发原则:只要类中的属性使用了private封装,必须严格按照要求编写setter与getter方法。

class Person{

  private String name; //此变量只能被Person类使用,外部类无法调用

  private int age;

  public void tell(){

    System.out.println(name + age);

  }

  public void setName(String n){

    name = n ;

  }

  public void setAge(int a){

    if(a >= 0 && a <= 250){

    age = a ;  //a满足条件才会赋值

    } 

  }

  public String getName(){

    return name;

  }

  public int getAge(){

    return age;

  }

}

public class TestDemo{

  public static void main(String args[]){

    Person per = new Person();
    per.setName("哪吒");

    per.setAge(-30);
    per.tell();
  }

}

构造方法与匿名对象

实例化对象:  类名称 对象名称 = new 类名称();

每部分意义:

  类名称:用于标记对象的类型,因为对象开辟空间后需要开辟堆内存,堆内存保存属性,属性在类中定义;

  对象名称:想操作类中的属性或方法,必须依靠对象名称完成。

  new:开辟新的堆内存空间,一定使用new完成。

  类名称():只要出现“()”的都表示方法。这个实际上就是构造方法

构造方法的定义要求:

  要求方法名称与类名称相同,并且没有返回值类型声明。

class Person{

  private String name; 

  private int age;
  
  public Person(String n, int a){  //方法名称与类名称相同即为构造方法
    setName(n);
    steAge(a);
  }
  public void tell(){

    System.out.println(name + age);

  }

  public void setName(String n){

    name = n ;

  }

  public void setAge(int a){

    if(a >= 0 && a <= 250){

    age = a ;  //a满足条件才会赋值

    } 

  }

  public String getName(){

    return name;

  }

  public int getAge(){

    return age;

  }

}

public class TestDemo{

  public static void main(String args[]){

    Person per = new Person("哪吒", -30); //实例化时就传值

    per.tell();
  }

}

实例化Person类对象时自动将name与age参数传递,可省略一系列的setter调用。

疑问:构造方法没返回值,为什么不用void声明?

  构造方法是在实例化对象的时候只调用一次,而所有的普通方法可调用多次。 如果定义为public void Person(){}.这就是普通方法的。

匿名对象:

指没有名字的对象。对象的名字保存在栈内存。

有名对象: Person per = new Person("ZZZ", -30);

匿名对象:new Person("ZZZ", -30).tell();  对象没有名字,使用了一次自动成为垃圾。

不用纠结是否使用有名还是无名。

开辟新的内存空间出了使用new之外还要调用构造方法;

构造方法定义要求:

  方法名称与类名称相同,无返回值声明;

  构造方法允许重载;

  如果一个类没声明构造方法,在编译时会自动创建一个无参的什么都不做的构造方法,所以至少会保留一个构造方法。

  匿名对象本质就是没有栈内存只使用堆内存空间。用一次成为垃圾。

原文地址:https://www.cnblogs.com/lonske/p/8672802.html