zoukankan      html  css  js  c++  java
  • 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之外还要调用构造方法;

    构造方法定义要求:

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

      构造方法允许重载;

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

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

  • 相关阅读:
    POJ 2559 Largest Rectangle in a Histogram(单调栈)
    POJ 1631 Bridging signals(最长上升子序列LIS)
    POJ 3977 Subset(二分+折半枚举)
    POJ 1742 Coins(dp多重背包)
    【洛谷P2622】关灯问题II【BFS】【状压】
    【洛谷P2622】关灯问题II【BFS】【状压】
    【洛谷P4281】紧急集合 / 聚会【LCA】
    【洛谷P4281】紧急集合 / 聚会【LCA】
    【洛谷P2420】让我们异或吧【DFS】
    【洛谷P2420】让我们异或吧【DFS】
  • 原文地址:https://www.cnblogs.com/lonske/p/8672802.html
Copyright © 2011-2022 走看看