zoukankan      html  css  js  c++  java
  • 无参构造与有参构造

    构造方法根据有无参数分为无参构造和有参构造

    无参构造语句:

    [修饰符]  类名(){
    }

    有参构造语句:

    [修饰符] 类名(type a1,type a2...){
    }

    它俩构成了方法重载。

    局部变量和成员变量的优先级问题:(如下述代码)

    public class Dog{ 
        String name;
    public Dog(String name){
    name=name;
    }
    }

    此时标记的name是无法赋值给name的,因为局部变量的优先级高于成员变量,name只会找到name

    name这种情况怎么解决呢?

    第一种方法:

    public class Dog{ 
        String name;
    public Dog(String _name){
        name=_name;
      }
    }

    将这个形参里的属性名变化一下以示区分,此时name在局部变量里面找不到name就会去成员变量里面找。

    第二种方法:

    关键字   this(可用于访问对象本身的属性)

    具体实例可跳到 this 环节。。。

    有参构造中常见问题:
    一般类里没声明构造的话,系统默认的是无参构造;

    如果声明了有参构造,但是其它类传过来的数据类型或者属性个数都不匹配的话,那么系统就会报错,

    此时咱们程序员就需要习惯性的两个构造都声明一下。

    举例说明:(下述类的有参构造只构造了名字和品种,但是没有声明无参构造)

     1 public class Dog{
     2     
     3     String name;
     4     int health;
     5     int love;
     6     String strain;
     7     
     8     /*
     9     public Dog(){
    10         System.out.println("构造方法");
    11         health = 100;
    12         love = 0;
    13     }
    14     */
    15 
    16     public Dog(String _name,String _strain){
    17         name = _name;20                   
    strain = _strain; 21 } 22 23 public void showInfo(){ 24 System.out.print("我的名字叫"+name); 25 System.out.print(",健康值"+health); 26 System.out.print(",亲密度"+love); 27 System.out.println(",我是一只"+strain); 28 } 29 }
    另一个类的属性赋值:
    Dog dog = new Dog(); dog.name = name; dog.health = 100; dog.love = 0; dog.strain = strain;

    9-13行代码就是解决方案。

    ***习惯性的两个构造都声明一下

  • 相关阅读:
    Python 文件操作
    Python 操作 sqlite
    Python中的random模块
    Linux系统下的/etc/nsswitch.conf文件
    Python 列表/元组/字典总结
    快斗之翼:python2的print和python3的print()
    田小计划:图解Python深拷贝和浅拷贝
    Python 自省指南
    Python运算符优先级
    tc: 模拟网络异常的工具
  • 原文地址:https://www.cnblogs.com/zhangxiong-tianxiadiyi/p/10742340.html
Copyright © 2011-2022 走看看