因为有着一年半的iOS开发经验(OC也是一门面向对象的语言)所以在对Java的面向对象的理解上也是有着自己的理解,今天就和大家分享一下。
面向对象中最为重要的三大思想就是:继承、封装、多态。本文将以一个实例场景来分析Java中的OOP。现有一个场景:学校人员管理。
首先分析出此场景所包含的角色类别:学生,老师,校长。那么我们可以为每个角色类别创建对应的类(具体相同特征或者行为的一种抽象)。学生(Student)、老师(Teacher)、校长(Headermaster)现在我们可以来分析一下这些类有没有一些共同的属性比如:姓名(name)、年龄(age)、性别(sex)等,因此我们就可以采用继承的思想,创建一个基类,让其他的类都继承这个基类(Person类),把共同的属性和方法就写在这个基类里面,其子类自动地共享基类中成员属性和成员方法。对应的目录如下
在基类的基础上,我们可以为每个类增加自己特有的属性和方法。
我们以Person类和Student类还有Teacher类来分析封装和多态的概念
1.Person类
2.Student类
3.Teacher类
4.测试方法
public static void main(String[] args) {
Person person = new Student("xiaoming", "male", 12);
person.roleDescribe();
// person.scoreDescribe(); // 错误
Person teacher = new Teacher("MSWang", "female", 43);
teacher.roleDescribe();
Student xiaodong = new Student("xiaodong", "male", 13);
xiaodong.roleDescribe();
xiaodong.setScore(95.6);
xiaodong.scoreDescribe();
}
运行结果:
i am a student
i am a teacher
i am a student
i get 95.6!!
我们来分析一下:
多态:通过基类(Person)去创建子类(Student、Teacher)的对象,并且调用一个同名的方法roleDescribe()。由于子类中都覆盖了此方法所以此方法的效果会有多种形态,此过程便是多态。
封装:封装就是把数据和过程封装起来,对数据的访问只能通过已经定义的接口。在Java中可以通过public\private\protected 来实现封装。比如:Person类的name,age,sex都是私有属性,这是对属性的封装。对外界提供方法的封装,可以通过提供的方法对name,age,sex进行设置和获取。
但是看看Teacher类可以发现并没有提供薪水的(salary)的get方法,那是因为老师不想被其它人知道他的工资。