类和对象的基本认识(二)

        前面我们说到了如果要访问类里面的内容,我们得使用(.),但有的时候我们用点却会报错,这是为什么呢?,原因就在于它们的权限不同,如果成员变量的前面有public修饰的话,那么我们不论在哪。只要有该类型的对象,就可以直接点出来,如果没有的话,就得看其他的了,现在我们得知道java里面有4种修饰符,如private,不写,protect, public这4种修饰,通常在工作或其他地方,我们大都使用privat和public,但其他的也要知道,现在我们得知道它们的作用,private在英语中是私有的意思,这就表示这个东西是只属于一个人的,而在java中同样有这层意思,被private修饰的成员变量和成员方法是只能被它所在的类里面所使用,而不能被外面使用,也不能被方法重写(这在后面说)。而public在英语中是公共的意思,所以被public修饰的,在任何位置都可调用。

class Student{
    private String name;
    private int age;
    public String sex;
    
    public void doClass(){
        System.out.println("上课");
    }
    
    private void doHomeWork(){
        System.out.println("写作业");
    }
}
public class Test {
    public static void main(String[] args) {
        Student student = new Student();
        student.sex = "男";//可以
        student.age = 10;//不行
    }
}

当然,其他2种也有其作用范围,那么它们的范围究竟有多大呢?现在就给你们看看:

private:同义包中的同一类。

default(也就是不写):包含private的范围还有同一包的不同类。(上面的代码就是同一包中的不同类)

protect:包含default的范围还包含不同包的子类(子类这个概念后面再说)。

public:包含protect的范围还包含不同包的非子类。(也就是不管在哪个位置都几乎可以调用)

当然,虽然它们可以修饰成员变量与成员方法,但这并不代表它们不可以修饰其他的,如如果它们放在类的前面,那么类的实例化也要在这个范围里面。但是private的范围不是只在它的类里面才能用吗,如果修饰类的话,要怎么实例化?我猜你可能会问这个问题,其实类不能用private修饰,如果被修饰的话,程序会编译不过去,就如你想的那样,如果用private修饰了类的话,岂不是连实例化都过不去,那这个类还有什么用呢?

        说完这个,那就得提构造方法了,相信有不少人已经知道构造方法了,但我还是要说。那么什么是构造方法呢?构造方法(也称为构造器)是一个特殊的成员方法,名字必须与类名相同,在创建对象时,由编译器自动调用,并且 在整个对象的生命周期内只调用一次。与其他的成员方法不一样的是,他没有返回值,不是返回类型是void,而是干脆不写。那么它的作用是什么呢?构造方法的作用就是对对象中的成员进行初始化,并不负责给对象开辟空间。而且一个类里面可以有多个构造方法,这时你应该会说,构造方法的名字不是必须要与类相同吗?这样的话,岂不是有重名的方法?对,说的没错,在C语言中应该是不允许有重名的函数,但是在java中可以,并且如果除了方法里面的主体不一样,其他的返回值,参数顺序与个数,方法名一样的话,则称作重写,如果参数不同,即使是顺序不同,返回值则无所谓的话,称作重载。咳咳咳,跑题了。回归主题,因为构造方法的作用就是对对象中的成员进行初始化,因此我们每创建一个对象,都会执行一次构造方法,也许你会说,你上面的代码不也没写构造方法吗?没错,虽然我没写,但是idea会默认给我提供一个不带参数的构造方法,但是,如果我们写了一个构造方法的话,他就不会提供,也就是帮无不帮穷,现在我们就来看看什么是构造方法。

class Student{
    private String name;
    private int age;
    public String sex;

    public Student() {//idea默认的构造方法就是如此
    }

    public Student(String name, int age, String sex) {//我们写的构造方法
        this.name = name;
        this.age = age;
        this.sex = sex;
    }

    public void doClass(){
        System.out.println("上课");
    }

    private void doHomeWork(){
        System.out.println("写作业");
    }
}

怎么突然出来一个this啊?别急,后面我们讲构造方法的时候继续再说。

你可能感兴趣的:(java,开发语言)