面向对象思想思想的三个特征:封装,继承,多态。
封装:
表现:函数就是一个最基本的封装体,类也是一个封装体。
好处:1、提高了代码的复用性,
2、隐藏了实现细节,可以对外提供可以访问的方法,便于调用者的使用。
3、提高了安全性。
下面通过私有化(private)来对封装进行理解:
class Person
{
//属性:
private int age; //age被修饰为了私有
//行为:
void speak()
{
System.out.println("age="+age);
}
}
年龄已被私有,错误的值无法赋值,可是正确的值也赋值不了,需要提供访问方式。
对变量的访问操作有两个动作:赋值(设置 set),取值(获取 get)
所以,对私有的变量访问的方式就是 setAge getAge
//定义对age赋值的方法。
void setAge(int a)
{
age = a;
}
//定义一个获取age值得方法。
int getAge ()
{
return age;
}(以后再描述事物,属性都私有化,并提供setXxx getXxx方法对其进行访问。)
记住:私有仅仅是封装的体现形式而已。
构造函数:
为了描述事物更准确,发现事物对应的很多对象一创建时,就有了一些初始化的数据。这需要通过“构造函数来完成”。
构造函数怎么在代码中体现?
1、没有返回值类型。因为构造对象,创建完就结束,不需要结果,void也不要写,。
2、构造函数名称和类名一致。
3、没有具体的返回值。
在Person类中定义一个构造函数
class Person
{
//属性:姓名,年龄。
private String name;
private int age;
//一初始化,既没有姓名,又没有年龄。
Person()
{
}
//定义构造函数,对象一创建就具备姓名。
Person(String n)
{
//将接收到的值赋值给对象的name
name = n;
}
//一初始化既有姓名,又有年龄。
Person(String n,int a)
{
name = n;
age = a;
}
//行为。
public void speak()
{
System.out.println("name="+name+",age="+age);
}
}
class PersonDemo2
{
public static void main(String[] args)
{
Person p = new Person("lisi");//对象创建时,必须会调用对应的构造函数,因为对象需要初始化。
// Person p2 = new Person("wangwu",23);
}
}
构造函数的细节: 1,一个类中可以有多个构造函数,它们的存在是以重载的形式体现的。 2,构造函数中也是有return语句的,用于结束初始化动作的。 3,构造函数是否能被private修饰呢?能,作用:其他程序无法创建该类的对象。
构造函数和一般函数的区别? 1,写法不一样。 2,运行上有差别,对象一创建就会调用对应的构造函数。 一般方法是对象创建后,才会调用所需的一般函数。 问:有了构造函数初始化姓名,那么还需要setName方法吗? 需要,因为对象创建后,如果需要对数据进行修改,可以通过set完成。 3,构造函数在对象创建时,仅调用一次(初始化动作只做一次,而且先执行)。
一般方法可以被对象调用多次。