6.面向对象的三大基本特征

6.面向对象的三大基本特征

封装

有些人可能学Java有半年了,还是搞不懂封装是什么东西。其实我们每天都在用封装。那么封装是什么呢?封装简单来说就是包装。比如说:我们把一堆数据放在一个类里面,并且加上get和set方法,这个就是JavaBean封装。再比如:我们把一些通用的代码放在一个方法里面,以后需要的时候直接调用方法就行了,这就是代码封装。

那么,为什么要用封装呢?封装有什么好处呢?

比如:我们需要一个学生的信息:姓名,年龄。并且在控制台显示出来,我们可以这样写:

public static void main(String[] args){

String name;

int age;

System.out.println(“这个学生的名字是:”+name+”,年龄是:”+age);

}

那么我想再定义一个学生信息,并且显示呢?我还需要重复这样的代码:重新定义两个变量并赋值。那么再想想,我需要十个学生的信息并且显示呢?还有,实际情况中,一个学生的信息不可能就这么几个变量,可能有十几个呢?难道我每次需要显示学生信息,都要定义这么多变量吗?想想吧,这真是太可怕了。

属性的封装

但是,现在我们可以用封装来实现,怎么实现呢?我们可以把所有的属性放在一个类中,这样,我需要显示学生信息时,只需要实例化一个类就行了。比如:

public class Student{

String name;

int age;

}

我们需要一个学生信息时可以这样写:

Student student=new Student();

student.name=”zhangsan”;

student.age=12;

System.out.println(“name:”+name+”,age=”+age);

有人可能会说:我怎么感觉除了代码量变大之后没有什么好处啊?是的,单单看这段代码,香港服务器,确实是如此,但是假如我们需要显示一个班级56个学生的信息,而这个班级的所有学生信息的年龄都是相同的,那么我们可以这样定义Student:

public class Student{

String name;

int age=12;

}

那么,实例化一个学生的信息时,我们只需要定义学生姓名就可以了,年龄就默认赋值了,大家现在可以再次对比一个封装和不封装的代码量,你就可以知道哪种更好了。

毫无疑问,从长远角度看以及从更好的适用性来看,通过将数据封装成对象,是很有必要的。

而且,假如你需要显示学生的信息,要显示学生年龄而只知道学生生日时,你需要这样写:

String birthday=”2002-01-03″;

//截取生日的前四位,获取出生的年份

….

//得到当前的系统时间,从而知道现在是哪一年

….

//通过减法得到年龄

….

//最后定义年龄变量并将计算结果赋值

….

好的,代码就不写了,懂什么意思就行了。那么,大家看这段伪代码,我第一行定义了生日变量,第五行定义了年龄变量,那么请问,假如这个程序有100行,你觉得可能是不是在第80行还可能又出现一个变量?那么,假如你过了很久又看这个程序或者别人看这个程序,他能一眼看出你总共定义了多少跟学生有关的变量吗?毫无疑问,很不方便的,但是,你假如通过封装之后呢?你需要看一下Student类中有多少属性,就马上知道了一个学生有多少变量了。

现在,再看学生Student这个类,假如我在main方法中给一个学生的age属性赋值-1,你说程序会不会出错?当然不会,你又没有规定年龄不能为负数。那么怎么办呢?两步:

一:将属性私有化,这样别人就不能直接访问变量了。

二:将访问变量的方式改为通过方法来访问,可以在方法中增加限制条件

结果如下:

class Student{

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) {

if(age>0){

this.age = age;

}

}

}

那么请问大家,这样是不是很好呢?要想改年龄赋值,必须调用setAge()方法,那么年龄必须大于0。

代码的封装

代码的封装我就不需要讲了,就是把一段代码封装成一个方法,方便以后的调用。

继承

继承就是子承父业。就是子类可以继承父类的所有属性和方法。有什么用呢?

比如我有一个Father类,姓是”赵”,香港虚拟主机,还有一个Son类,姓当然也是”赵”了,那么现在我们按一般的思路,香港服务器,就是建两个类,都有姓这个属性,值都是赵。但是呢?这样我感觉很不爽啊,假如这两个类有十个属性都是一样的,我还需要两个类都这样写吗?太糟糕了。

因此Java产生了继承的概念:

我们可以定义一个Father类,而子类Son继承Father类,这样,姓这个属性就继承过来了,不需要再写一次。

public class Father{

String;

}

public class Son extends Father{

}

虽然Son里面空空的,但是你可以调用Son的name属性。这就是封装的迷人地方。

你可能会说,我可能想改姓呢,怎么办呢?只需要再Son中再定义一次name就好了。

public class Son extends Father{

String;

}

继承最大的优点就是我们可以重用一个以前写好的类,继续使用原来类中的属性和方法,我们甚至可以修改原来类中某些属性或方法,以符合当前类的需要。

你可以这样理解 impossible(不可能)–I'm possible (我是可能的)。

6.面向对象的三大基本特征

相关文章:

你感兴趣的文章:

标签云: