面向对象
(1)封装性
封装性:
- 如果属性没有封装,那么在本类之外创建对象后,可以直接访问类的属性,这样的话对于类中的数据,我们在类的外面就可以修改类中的数据。
- private关键字:使类私有化,类中的数据只能在本类中使用,但是想要在外部使用,我们需要提供公有方法来间接访问;
- 通常在一个类中,属性通常都私有化,对外提供setter和getter方法来达到能在外部使用类中数据的目的。
对属性的封装
这是没封装之前
public class test{
public static void main(String[] args){
Person p=new Person();//创建一个People的对象p
}
}
//没封装之前
class Person{
String name; //成员变量,在类中定义
int ages;
}
}
对属性封装之后
public class test15{
public static void main(String[] args){
Person p=new Person();
}
}
//封装后
class Person{
//属性的封装
private String name; //成员变量,在类中定义
private int ages;
}
private
修饰符可以将属性私有化使其在外部不轻易被修改,但是有时我们又需要在外部调用类的数据,这该怎么办呢?这时我们可以通过调用setter和getter的方法来达到该目的。
public class test15{
public static void main(String[] args){
Person p=new Person();
p.setName("你好!");
}
}
//封装后使用setter和getter方法
class Person{
//属性的封装
private String name; //成员变量,在类中定义
private int ages;
//对外提供一个name属性设值的方法
public void setName(String name){
this.name=name; //this调用类中的属性
}
//对外提供一个获取name属性的方法
public String getName(){
return name;
}
}
从上面的代码可以知道
- 在使用setter方法时:无返回值,有传入参数。
- 在使用getter方法时:有返回值,无传入参数。
(2)构造函数
构造方法:
- 构造方法是在类中定义的,构造方法的定义格式:方法名与类名称相同无返回值类型的声明;
- 构造方法就是类构造对象时的方法,用于对象的初始化工作;
- 构造方法是实例化一个类的对象时,也就是new 的时候,最先调用的方法;
public class test15{
public static void main(String[] args){
Person p=new Person();
p.setName("你好!");
}
}
class Person{
public Perple(){} //这个是默认的构造方法,当你没写有这个时,系统默认有这个构造方法。一般来说我们都会把这个默认的构造方法写出来
public Perple(String name,int age){
this(name); //调用其它构造方法时,此语句需要放在第一句;在构造方法相互调用时必须要有出口
this.age=age; //this调用类中的属性
}
private String name; //成员变量,在类中定义
private int ages;
//对外提供一个name属性设值的方法
public void setName(String name){
this.name=name; //this调用类中的属性
}
//对外提供一个获取name属性的方法
public String getName(){
return name;
}
}
上面的代码中我们可以看到有public Perple()
和public Perple(String name,int age)
,它们之间的传入参数不一样,这就是构造函数的重载。
public class test{
public static void main(String[] args){
Perple p1=new Perple();
Perple p2=new Perple("你好",5);
}
}
class Perple{
public Perple(){} //这个是默认的构造方法,当你没写有这个时,系统默认有这个构造方法。一般来说我们都会把这个默认的构造方法写出来
public Perple(String name,int age){
this(name); //调用其它构造方法时,此语句需要放在第一句;在构造方法相互调用时必须要有出口
this.age=age; //this调用类中的属性
}
private String name; //成员变量,在类中定义
private int ages;
//对外提供一个name属性设值的方法
public void setName(String name){
this.name=name; //this调用类中的属性
}
//对外提供一个获取name属性的方法
public String getName(){
return name;
}
}
在上面代码中
Perple p1=new Perple();
Perple p2=new Perple("你好",5);
在Perple p1=new Perple();
中因为没有参数,所以调用的是类中的public Perple()
方法
在Perple p2=new Perple("你好",5);
中,“你好”对应String name
,"5"对应int age
,所以调用的是public Perple(String name,int age)
方法。