禹娜,day19

2020年12月7日

构造函数

构造函数

构造函数也叫构造方法,或者构造器。在java中,当类创建一个对象时会自动调用该类的构造方法,构造方法分为默认构造方法和自定义构造方法。

##### 构造函数的定义

如果类内的方法名称类名相同,并且没有返回值类型也不写void,那么这个方法就叫做构造方法,或构造函数。

class Person{
    //Person类的构造方法
    public person(){
        
    }
}
构造函数的调用规则

1.实例对象化时,必须调用类的构造函数。也就是在new对象时,一定要调用构造函数。

2.如果类中没有显示定义构造函数,那么JVM会为类自动定义无参的构造函数。如果类中定义了任何一个构造函数,那么JVM就不会为类定义默认的构造函数。

3.构造函数是在实例化对象时自动调用的,或者是在其他构造函数中通过this关键字调用。

    public Order(int number){
         this.number=number;
    }
    public Order(){
        this(2);
}

4.构造函数不允许使用对象直接调用

5.构造函数调用时根据参数匹配原则调用相应的构造函数。

为什么定义构造函数

构造函数的作用是在创建对象时,为对象的属性初始化。

 public class Order{
    Sting OrderId;
    int number;
     //构造函数
     public Order(){
         orderId="123232";//初始化
         number=3;//初始化
     }
     public static void main(String[] args){
         Order order=new Order();
         System.out.println(order.orderId);
         System.out.println(order.orderId);
     }
}
this关键字

this是java的关键字,表示当前正运行的对象,this指代当前对象的引用。

1.使用this调用成员变量,解决成员变量与局部变量的同名冲突

public class Person{
    public String name;
    Public void setName(String name){
        //成员变量与局部变量同名,this.name表示成员变量,name表示局部变量
        this.name=name;
    }
}

public class Person{
    Public String name;
    public void setName(String str){
        //成员变量与局部变量不同,this可以省略
        name=str;
    }
}

2.使用this调用成员方法

public class Person{
    public void eat(){       
    }
    public void work(){
        this.eat();//this调用成员方法,可以省略this
    }
}

3.使用this调用重载的构造方法,只能在构造方法中使用,且必须是构造方法的第一条语句。

public class Person{
    public String name;
    public int age;
    public Peron(String name){
        this.name=name;
    }
    public Person(String name,int age){
        this(name);
        this.aeg=age;//调用重载的构造方法
    }
}
构造函数的重载

构造函数重载与方法重载完全相同

public class Order{
    String orderId;
    int number;
    //第一种重载
    public Order() {
        orderId = "2031223123";//初始化
        number= 3;//初始化
    }
    //第二种重载
    public Order(String orderId,int number) {
        this.orderId = orderId;
        this.number= number;
    }
}

构造函数的调用

调用本类的构造函数使用this().

调用父类的构造函数使用super();

但是必须写在构造函数内的第一行代码,否则不能编译。

public Score(int lishi) {
        this.lishi = lishi;
    }
    public Score() {
        this(5);
    }
    public Score(int a,int b) {
        super();
    }

封装

封装

封装是面向对象的三大特征之一。是用来保护数据的(数据的读取和写入)

​ 数据用四种保护方式,分别是

  1. 不允许读,不允许写。

  2. 允许读,不允许写。

  3. 允许写,不允许读。

  4. 允许读,允许写。

方法被调用也分为四种情况

  1. 类内的其他方法可以调用吗

  2. 同包中的其他类可以调用吗

  3. 子类可以调用吗

  4. 任务类可以调用吗

封装的实现方法

封装是通过访问修饰符来实现的。访问修饰符一共有四个:public,protected , private,默认

访问修饰符

private 可以修饰属性,可以修饰方法,不能修饰类。

private的使用规则:private修饰的属性或方法只允许在类内被访问。Private是最严格的封装。*

*** public 表示共有,由public访问修饰符修饰的属性或方法或类可以在任何地方被调用。***

默认访问修饰符如何实现封装

类,属性,方法定义时不写任何访问修饰符,此时就是默认。

class OldBing {
    String name;
    void show() {
        this.name = "哈哈";
    }
}
封装的私有属性
public class Score {
    private int math; //private封装属性
    
    public int getMath() {//public封装方法
        return this.math; //public方法中返回private属性
    }
    public void setMath(int math) {
        this.math = math;
    }
    public Score(int math) {
        this.math =math;
    }
}
如果只提供get方法,不提供set方法,表示只读不写。
如果只提供set方法,不同供get方法,表示只写不读.
如果提供了get方法和set方法,表示可读写.
如果get方法和set方法都不提供,表示不可读写。

标签

评论


© 2021 成都云创动力科技有限公司 蜀ICP备20006351号-1