无参构造与有参构造

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

无参构造语句:

[修饰符]  类名(){
}

有参构造语句:

[修饰符] 类名(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行代码就是解决方案。

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

 

posted @ 2019-04-20 19:33  c++天下第一  阅读(2475)  评论(0编辑  收藏  举报