• 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之外还要调用构造方法;

    构造方法定义要求:

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

      构造方法允许重载;

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

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

  • 相关阅读:
    在网页中实现截屏粘贴的功能
    CSS3 @font-face 做自定义图标
    Visual Studio报错一箩筐(持续更新)
    Axure实现vcg官网首页原型图
    Axure实现bootstrap首页线框图
    Web第一天——准备篇
    vue动态加载组件
    组件封装之将代码放到npm上
    node连接mysql生成接口,vue通过接口实现数据的增删改查(二)
    autoCAD2007 快捷键 标注
  • 原文地址:https://www.cnblogs.com/lonske/p/8672802.html
Copyright © 2020-2023  润新知