第七章:浅谈面向对象

来源:互联网 发布:网络谣言产生的原因 编辑:程序博客网 时间:2024/06/17 13:05

大家学习Java的都知道,Java最最精髓,最最吸引人的地方就是面向对象。那么到底什么才是面向对象呢?

我们都知道c语言是面向过程的,所有代码一个程序结束,感觉给人一种不太明了的感觉!

到底面向对象和面向过程有哪些区别呢?下面我举个例子来阐述下。

就好盖房子,普通工人盖房子仅仅按照用户的需求,针对性的盖。也不需要准备太多的东西,好比“见招拆招”,需要什么找什么,这就是面向过程。在盖房子的过程中需要什么拿什么。

而工程师来盖房子怎么盖的呢?工程师首先要根据用户的需求,画一张图纸吧(反正我没有见哪个工程师盖房子不画图纸的)。然后根据图纸准备需要的工具吧!先盖什么后盖什么有一个清晰的思路吧!这就是面向对象!面向对象就是先根据用户的需求,然后分析,得出“工具”,最后建设!

Java有一切皆对象的说法

也就是说所有的东西都是对象,包过8大常用数据类型,也可以进行装箱操作,成为对象,所以说,一切皆对象!

面向对象的程序设计具有封装性、继承性、多态性3个特点!

那么什么是封装性、继承性、多态性。

封装性:

封装性就不再多说了,我的前面的每个程序都是封装起来的,那些就是封装的最好说明,为了大家方便读阅,我在这里举一个非常简单的例子:

代码如下:

package cn.edu.hpu.acm.demo03;//将User的所有信息全部封装起来,外类无法直接访问,必须通过get、set方法进行访问public class User {//声明name属性private String name;//声明age属性private int age;//声明sex属性private String sex;//定义构造方法public User(String name,int age,String sex){this.setName(name);this.setAge(age);this.setSex(sex);}//定义set、get方法//取得name信息public String getName() {return name;}//设置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;}}

测试类如下:

package cn.edu.hpu.acm.demo03;//定义测试类,对其进行测试public class Test {public static void main(String[] args) {// TODO Auto-generated method stubtest();}//将方法封装起来,使得主方法越简单越好public static void test(){//实例化User对象User u = new User("张三",33,"男");//输出对象,调用get方法System.out.println(u.getName()+"\t"+u.getAge()+"\t"+u.getSex());}}

程序运行结果如下图所示:


如此就是封装!

下面我们看看继承性:

继承就是父亲和儿子的关系,在Java中,几乎所有的类都有父类(Object),可以这么说Object类是所有类的父类。具体不再多说,下面我们看看什么叫做继承。、
举一个例子,现在有一个“人(Person)”类,有学生(Student)类,有工人(Work)类,那么,我想问的就是,学生是不是人?工人是不是人?既然都是人,如果再将其单独放出来那么加入人里面有姓名,年龄,性别基本属性,难道学生或工人就没有了么?如果再写一遍是不是明显不合适呢???所以这里就有了继承关系,既然学生是人,工人也是人,那么,我们就可以让学生或工人继承人的所有属性!新增加的属性再放在学生或工人的类中。具体操作如下
Person类代码如下:
package cn.edu.hpu.acm.demo04;public class Person {//声明name属性private String name;//声明age属性private int age;//声明sex属性private String sex;//构造方法public Person(String name,int age,String sex){this.setName(name);this.setAge(age);this.setSex(sex);}//set、get方法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 String getInfo(){return "\t姓名:"+this.getName()+"\t年龄:"+this.getAge()+"\t性别:"+this.getSex();}}

Student类代码如下:
package cn.edu.hpu.acm.demo04;public class Student extends Person {//声明学校属性private String school;//声明成绩属性private float score;//构造方法public Student(String name, int age, String sex, String school, float score) {//super关键字调用Person类构造方法super(name, age, sex);// TODO Auto-generated constructor stubthis.setSchool(school);this.setScore(score);}//get、set方法public String getSchool() {return school;}public void setSchool(String school) {this.school = school;}public float getScore() {return score;}public void setScore(float score) {this.score = score;}//覆写父类中的得到信息的方法public String getInfo(){return super.getInfo()+"\t学校:"+this.getSchool()+"\t成绩:"+this.getScore();}}

Work类代码如下:
package cn.edu.hpu.acm.demo04;public class Work extends Person {//声明工厂属性private String factory;//声明工资属性private float salary;//构造方法public Work(String name, int age, String sex, String factory, float salary) {//super关键字调用父类Person构造方法super(name, age, sex);// TODO Auto-generated constructor stubthis.setFactory(factory);this.setSalary(salary);}//set、get方法public String getFactory() {return factory;}public void setFactory(String factory) {this.factory = factory;}public float getSalary() {return salary;}public void setSalary(float salary) {this.salary = salary;}//覆写父类中的方法public String getInfo(){return super.getInfo()+"\t工厂:"+this.getFactory()+"\t工薪:"+this.getSalary();}}

测试代码如下:
package cn.edu.hpu.acm.demo04;public class Test {public static void main(String[] args) {// TODO Auto-generated method stub//实例化StudentPerson stu = new Student("张三",13,"男","星光小学",77.7f);//实例化WorkPerson work = new Work("李艾",33,"女","隆兴工厂",9999.9f);//输出信息System.out.println("学生信息--->"+stu.getInfo());System.out.println("工人信息--->"+work.getInfo());}}

程序运行结果:



多态性:

多态性在Java中主要有两种表现形式:
1、方法的重载与覆写
2、对象的多态性
这里我没有想到好的例子就到此为止吧!
0 0