第四章、Java面向对象(三)
本人也是刚入门Java语言,可能会有一些地方出现错误,描述的不对。如果发现不对的地方请及时指出,好对其进行修改。这样不仅可以让我学到东西,也可以让其他刚入门的朋友学习更正确的内容。
所有内容仅供参考。不具有完全的准确性!
注:关于Java的所有内容都会参考到尚硅谷在网上公开的学习视频及其提供的PPT
一、面向对象三大特征:封装
(一)为什么需要封装
在日常生活中,我们会用到各种各样的东西。当我们使用这些东西的时候,不需要去了解其内部是如何构造的,怎么运行的,我们只需要知道该如何使用它就好了。比如:洗衣机、汽车、冰箱等等。
像洗衣机,我们使用的时候只需要按一下开关就好了,无需知道它为什么可以转,它是怎么转的。这就可以说是日常生活中的封装。
通过封装,可以实现对属性的数据访问限制,同时增加了程序的可维护性。
(二)什么是封装
隐藏对象内部的复杂性,只对外公开简单的接口。便于外界调用,从而提高系统的可扩展性、可维护性。通俗的说,把该隐藏的隐藏起来,该暴露的暴露出来。这就是封装性的设计思想。
(三)封装怎么使用
通过将数据声明为私有的(private),再提供公共的(public)方法:getXxx()和setXxx()实现对该属性的操作,以实现下述目的:
- 隐藏一个类中不需要对外提供的实现细节(通过修改访问权限进行隐藏);
- 使用者只能通过事先定制好的方法来访问数据,可以方便地加入控制逻辑,限制对属性的不合理操作;
- 便于修改,增强代码的可维护性;
例:
将数据封装起来,需要通过getXxx()方法获取值,setXxx()设置值
//将属性name 和 age 定义为private
private String name;
private int age;
//提供公共的方法实现对属性的读写
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
(四)封装的优点
- 提高程序的“高内聚、低耦合”。
高内聚 :类的内部数据操作细节自己完成,不允许外部干涉;
低耦合 :仅对外暴露少量的方法用于使用。 - 类内部的结构可以自由修改。
- 可以对成员变量进行更精确的控制。
- 隐藏信息,实现细节。
二、访问修饰符
三、构造器(或构造方法)
语法格式:
权限修饰符 类名(参数列表){
初始化语句;
}
(一)构造器的特征
- 它的名字和类名相同
- 没有任何返回值(包括void也没有)
- 不能被static、final、synchronized、abstract、native修饰,不能有return语句返回值
- 可以有多个,但形参列表不能一样(可以重载)
(二)构造的作用
- 创建对象,给对象进行初始化。
如Object obj = new Object();
此处使用的就是Object类中的空参构造器。
Person p = new Person(“张三”,26,“男”);
此处使用构造器时Person类中的带参构造器:public Person(String name, int age, String sex){ 初始化语句; }。通过此构造器可以为对象p的属性进行初始化。
如同我们规定每个“人”一出生就必须先洗澡,我们就可以在“人”的构造器中加入完成“洗澡”的程序代码,于是每个“人”一出生就会自动完成“洗澡”,程序就不必再在每个人刚出生时一个一个地告诉他们
要“洗澡”了。
例:
class Person{
private String name;
private int age;
private String sex;
//空参构造器
public Person(){
}
//全参构造器
public Person(String name, int age, String sex) {
super();
this.name = name;
this.age = age;
this.sex = sex;
}
//对属性就行封装
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
}
创建对象:
public static void main(String[] args) {
//创建空参的构造器
Person p = new Person();
//创建带参的构造器
Person p1 = new Person("张三",24,"男");
//测试对象 p和 p1的属性值
//因为Person类中的所有属性都被封装了起来,所以要通过提供的接口(getName())来读取属性信息
System.out.println(p.getName());
System.out.println(p1.getName());
}
输出结果:
null
张三
-
构造器的分为两类:
隐示无参构造器(系统默认提供)
显示定义一个或多个构造器(无参、有参) -
注意
- Java语言中,每个类都至少有一个构造器
- 默认构造器的修饰符与所属类的修饰符一致
- 一旦显式定义了构造器,则系统不再提供默认构造器
- 一个类可以创建多个重载的构造器
- 父类的构造器不可被子类继承
四、了解JavaBean
推荐:
https://blog.csdn.net/chenchunlin526/article/details/69939337
https://blog.csdn.net/fuhanghang/article/details/84074561
五、this关键字
推荐:https://www.cnblogs.com/zheting/p/7751752.html
this 关键字用来表示当前对象本身,通过 this 可以调用当前对象的所有方法和属性。
this 可以调用类的属性、方法和构造器
它在方法内部使用,即这个方法所属对象的引用;
例:
private String name;
public void show(){
// 此处的this根据掉用show()方法的对象而定,谁调用的show(),this就表示谁
this.name = "Tom";
}
它在构造器内部使用,表示该构造器正在初始化的对象;
例:
private String name;
//空参构造器
public Person(){
//当使用该构造器创建对象时,this就表示该对象
this.name = "法外狂徒张三";
}
什么时候使用this关键字呢?
当在方法内需要用到调用该方法的对象时,就用this。
具体的:我们可以用this来区分属性和局部变量。
比如:this.name = name;
注意:
- 可以在类的构造器中使用"this(形参列表)"的方式,调用本类中重载的其他的构造器!
- 明确:构造器中不能通过"this(形参列表)"的方式调用自身构造器
- 如果一个类中声明了n个构造器,则最多有 n - 1个构造器中使用了"this(形参列表)"
- "this(形参列表)"必须声明在类的构造器的首行!
- 在类的一个构造器中,最多只能声明一个"this(形参列表)"
参考:
https://www.jb51.net/article/120663.htm