zoukankan      html  css  js  c++  java
  • 面向对象之构造方法and this关键字

    构造方法介绍

    需要在创建对象的同时明确对象的属性值

    l  构造方法的格式:

    修饰符构造方法名(参数列表)

    {

    }

    构造方法的体现:

    1.  构造方法没有返回值类型。也不需要写返回值。因为它是为构建对象的,对象创建完,方法就执行结束。

    2.  构造方法名称必须和类名保持一致。

    3.  构造方法没有具体的返回值。

    构造方法的代码体现:

     1 class Person {
     2 
     3     // Person的成员属性age和name
     4 
     5     private int age;
     6 
     7     private String name;
     8 
     9  
    10 
    11     // Person的构造方法,拥有参数列表
    12 
    13     Person(int a, String nm) {
    14 
    15         // 接受到创建对象时传递进来的值,将值赋给成员属性
    16 
    17         age = a;
    18 
    19         name = nm;
    20 
    21     }
    22 
    23 }

    public class Person {
        private String name;
        private int age;
        public Person(){
            name="小猪佩奇";
            age=16;
        }
        //构造方法的重载
        public Person(String name,int age){
            this.name=name;
            this.age=age;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public int getAge() {
            return age;
        }
        public void setAge(int age) {
            this.age = age;
        }
        
    }

    测试类:

    public class Test {
        //构造方法调用:创建对象new的时候调用,而且一个对象只能调用一次
        //构造方法:1.如果你这个类里面,一个构造方法也没有,那么这个类在编译时候,
                        //你的编译器会自动给你添加一个空参构造方法
                        //public Person(){}
        //2.但如果你的这个类中有哟个或者多个构造方法,那么编译器就不给你添加了
        public static void main(String[] args) {
            Person p=new Person();
            Person p1=new Person("琪琪国王",8);
            System.out.println(p1.getName());
            System.out.println(p1.getAge());
    
        }
    
    }

    图解:

    构造方法和一般方法区别

    构造方法在对象创建时就执行了,而且只执行一次。

    一般方法是在对象创建后,需要使用时才被对象调用,并可以被多次调用。

    this关键字

    构造方法之间的调用,可以通过this关键字来完成。

    1.  构造方法调用格式:

    this(参数列表);

     构造方法的调用

    class Person {
    
        // Person的成员属性
    
        private int age;
    
        private String name;
    
     
    
        // 无参数的构造方法
    
        Person() {
    
        }
    
     
    
        // 给姓名初始化的构造方法
    
        Person(String nm) {
    
            name = nm;
    
        }
    
        // 给姓名和年龄初始化的构造方法
    
        Person(String nm, int a) {
    
            // 由于已经存在给姓名进行初始化的构造方法 name = nm;因此只需要调用即可
    
            // 调用其他构造方法,需要通过this关键字来调用
    
            this(nm);
    
            // 给年龄初始化
    
            age = a;
    
        }
    }

     this的原理图解

    可以在成员变量名前面加上this.来区别成员变量和局部变量

    class Person {
        private int age;
        private String name;
    
        // 给姓名和年龄初始化的构造方法
        Person(String name, int age) {
            // 当需要访问成员变量是,只需要在成员变量前面加上this.即可
            this.name = name;
            this.age = age;
        }
    
        public void speak() {
            System.out.println("name=" + this.name + ",age=" + this.age);
        }
    }
    
    class PersonDemo {
        public static void main(String[] args) {
            Person p = new Person("张三", 23);
            p.speak();
        }
    }

      this的应用

    需求:在Person类中定义功能,判断两个人是否是同龄人

    class Person {
    
        private int age;
    
        private String name;
    
    
        // 给姓名和年龄初始化的构造方法
    
        Person(String name, int age) {
    
            // 当需要访问成员变量是,只需要在成员变量前面加上this.即可
    
            this.name = name;
    
            this.age = age;
    
        }
    
     
    
        public void speak() {
    
            System.out.println("name=" + this.name + ",age=" + this.age);
    
        }
    
     
    
        // 判断是否为同龄人
    
        public boolean equalsAge(Person p) {
    
            // 使用当前调用该equalsAge方法对象的age和传递进来p的age进行比较
    
            // 由于无法确定具体是哪一个对象调用equalsAge方法,这里就可以使用this来代替
    
            /*
    
             * if(this.age == p.age) { return true; } return false;
    
             */
    
            return this.age = p.age;
    
        }
    
    }
  • 相关阅读:
    verilog RTL编程实践之四
    TB平台搭建之二
    hdu3466 Proud Merchants
    poj2411 Mondriaan's Dream (用1*2的矩形铺)
    zoj3471 Most Powerful
    poj2923 Relocation
    hdu3001 Travelling
    poj3311 Hie with the Pie
    poj1185 炮兵阵地
    poj3254 Corn Fields
  • 原文地址:https://www.cnblogs.com/2734156755z/p/9365061.html
Copyright © 2011-2022 走看看