今日所学:
1.如何构造函数以及构造函数注意事项
2.this. 的作用之一
3.成员函数的重载
4.局部变量的覆盖
5.setter和getter函数
package human;
public class Child {
/*构造函数:在创建对象的时候调用 基本作用:初始化数据
//系统自己定义了一个无参的构造函数 构造函数没有返回类型 即使是void也不行 ,因为系统定义的构造函数返回的是一个实例
//自定义构造函数 格式 public 类的名字 (参数列表){}
定义构造函数注意事项
1.函数名称必须和类名称保持一致 注意大小写
2.构造函数不能有返回类型
3.如果我们自定义了构造函数一定要再定义一个无参构造函数
4.构造函数可以重载 重载就是可以有相同名称的函数,但函数的参数个数或参数类型或返回类型 不同
*/
int age;
String name;
String gender;
int var=20;
public Child(){
this.age=5;
}
public Child(String name){
this.name=name;
}
public Child(String name,int age,String gender){//函数名称必须和类一致,否则会将该函数看作成员函数
this.age=age;
this.name=name;
this.gender=gender;
//将参数分别赋值给当前实例对应的属性,this在这里代表当前实例,类似于C语言的指针 指向当前的对象
}
void printinfor(){
System.out.println(this.name +" is "+age+" years old!");
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
//理解成员函数的重载,参数类型不同,参数个数不同,返回值类型不同
public void f(int a){
System.out.println("a="+a);
}
//局部变量的覆盖 当函数中的局部变量和类的成员变量一样的时候,局部变量覆盖成员变量
public void f(){
int var=30; //局部变量 区别于类的成员变量 var
System.out.println("var="+var);//此处 局部变量覆盖了成员变量 输出的值为30
//要使用类变量var 需在变量前加this.
System.out.println("成员变量var="+this.var);
//所以在函数中避免定义与类的成员变量一致的局部变量 以免引起逻辑错误
}
public int f(int a,int b){
System.out.println("a="+a);
return a;
}
public static void main(String[] args) {
int age=10;
String name="Tom";
String gender="男";
// TODO Auto-generated method stub
//Child c=new Child(); 会出现错误- The constructor Child() is undefined
//如果我们没有定义构造函数 系统会默认提供一个无参构造函数 如果我们定义了构造函数系统将不再提供
Child c=new Child(name,age,gender);
c.printinfor();
Child c1=new Child("zhang san");
c1.printinfor();
Child c2=new Child();
c2.gender="女";
c2.name="jane";//外部访问数据,不安全 我们需要有共同的方法 setter
System.out.println("将c2的属性 姓名 由Jane改为Lily");
c2.setName("Lily");
c2.printinfor();
System.out.println("将c2的姓名修改为:"+c2.getName());
System.out.println("下面演示变量覆盖");
c2.f();
}
}