面向对象的特点:封装、继承和多态。
封装(private):
用private关键字修饰的成员变量或者方法,但是在日常使用时不拿它来修饰方法,因为既然定义了方法就是可以供外部调用使用的,所以一般使用public、static、final或者protected修饰,如果你真想需要用起来关键字、修饰符来修饰的也是可以的。
我们一般用private来封装成员变量,因为一些私有的属性不想被外部类访问或者修改;例如,身份证信息,这是私有的属性,我们并不想被他人随意访问修改,我们就可以把它设置为私有的,只有调用我们指定的方法才能获取和修改该内容。
private关键字,配合getXXX()和setXXX()方法使用,无疑getXXX()是获取该内容并返回给用户;setXXX()是修改该内容。
//此时的userID和userName就是封装之后的成员变量//用户如果想要访问的话,只能通过get字段名+set字段名,进行属性的访问和修改publicclassStudent { // 1.定义学生的属性Stringname; intage; Stringsex; privateStringuserID; //定一个私有属性,外部方法不能随意调用(只能让set/get方法访问调用)privateStringuserName; // 2.定义学生能实现的方法publicvoidlearning(){ System.out.println(name+",可以好好学习!"); } // 3.学生能实现吃饭方法publicvoideat(){ System.out.println(name+",吃饭"); } // 4.打印userIDpublicvoidprintUserId(){ System.out.println("身份证号为:"+userID); } // 5.定义一个 get 方法让用户可以获取身份证号publicStringgetUserID(){ returnuserID; } // 6.定义一个 set 方法让用户可以修改身份证号publicvoidsetUserID(StringuserID){ this.userID=userID; } publicStringgetUserName() { returnuserName; } publicvoidsetUserName(StringuserName) { this.userName=userName; } // 无参构造方法publicStudent(){ //无参构造一般不打印内容//System.out.println("我是无参构造方法"); } // 有参构造方法publicStudent(StringuserID,StringuserName){ this.userID=userID; this.userName=userName; } }
this关键字:
this是代表当对象的引用(谁调用this,this就指代谁)。this一般指代当前类;当一个对象创建成功之后(在执行该类的构造方法之前对象就已经被创建了),Java虚拟机就会动态的为该类分配一个引用,这个引用指向的就是被创建出来的对象,并且该引用的名字为this,所以this指代的就是当前类。
this.成员变量 本类的成员变量
this.成员方法 本类的成员方法
this.构造方法 本类的构造方法
this关键字的使用场景:
- 当成员变量和局部变量重名的时候,可以用this关键字来指代成员变量;
- 引用本类身的构造方法;注意:this调用构造方法的话,要放在方法中第一行使用;
- 返回当前对象的引用,常在方法后面写 return this (increment()通过this关键字返回了当前对象的引用,此处只了解)。
注意:后面还有super关键字,它是是使用在具有继承关系的实现类中,用于调用父类中的属性或者构造方法,注意区分。
//此时的userID和userName就是封装之后的成员变量//用户如果想要访问的话,只能通过get字段名+set字段名,进行属性的访问和修改publicclassStudent { // 1.定义学生的属性Stringname; intage; Stringsex; // 2.定义学生能实现的方法publicvoidlearning(){ System.out.println(name+",可以好好学习!"); } // 无参构造方法publicStudent(){ //无参构造一般不打印内容//System.out.println("我是无参构造方法"); } // 有参构造方法publicStudent(Stringname,intage){ this.name=name; this.age=age; } // 重载的有参构造方法publicStudent(Stringname,intage,Stringsex){ this(); this.name=name; this.age=age; this.sex=sex; } // 输出打印学生的相关信息publicvoidsutMassage(){ System.out.println("name:"+name+",age:"+age+",sex:"+sex); } }
//Student的实现类publicclassStudentAchieve { publicstaticvoidmain(String[] args) { Studentstu=newStudent("小明",66,"男"); stu.sutMassage(); } } /*输出打印的内容:Student类的无参构造name:小明,age:66,sex:男*/
this关键字的注意事项:
1.this关键字只能在方法内部使用,表示对“该对象(调用this关键字的对象)”的引用。
2.this不能用于static方法中,因为this指代当前对象,而static没有对象。static修饰的方法为静态的方法,且静态方法只能调用静态方法。
此处大概了解一下什么是static关键字即可:
static 在java中是 静态的意思他可以用来修饰成员变量,成员方法和代码块 ;
static关键字的特点:
1.随着类的加载而加载,随着类消失而消失,所以不存在创建对象的说法;
2.优先于类的对象存在,不依赖于类的实例,被static关键字修饰的方法,可以通过直接 类名.static关键字修饰的方法; 即可实现静态方法的调用。
https://blog.csdn.net/qq_43399015/article/details/107676447
//注:静态方法只能被调用静态成员变量!publicclassStudent { // 1.定义学生的属性staticStringname; staticStringID ; staticintage; // 2.定义学生能实现的方法publicvoidlearning(){ System.out.println(name+",好好学习!"); } // 5.打印学生的所有属性信息publicstaticvoidstudentMess(){ System.out.println("我是:"+name+"\n我的学号是:"+ID+"\n我今年"+age+"岁了"); } //无参构造方法 publicStudent(){ System.out.println("Student类的无参构造"); } //有参构造方法publicStudent(Stringname,StringID,Stringsex){ this(); this.name=name; this.ID=ID; this.sex=sex; } }
publicclassStudentAchieve { publicstaticvoidmain(String[] args) { Studentstu=newStudent("小明","202201246","男"); Student.studentMess(); //类名.static修饰的方法 } } /*输出内容Student类的无参构造我是:小明我的学号是:202201246我今年66岁了*/