第八天

来源:互联网 发布:电脑花样机打版软件 编辑:程序博客网 时间:2024/05/05 05:47

面向对象

一、谈谈什么是面向对象的思维

 

二、Java中的面向对象(类和对象)

掌握面向对象的基本语法:Java最基本的单位是类

Java中有两个重要的概念,类和对象。

身高,年龄,性别,星座,血型,省份

现有数据类型不能够表示这么多信息?

解决方案:创建一个类型来表示这些信息

案例1:创建一个老师类

Public class 类名{

   数据类型 变量名;

   访问修饰符 返回值类型 方法名(参数列表){

       方法体;

   }

}

案例2:创建一个老师对象

类已经有了,但是类是抽象的概念,真正可以干活的是具体的对象,怎么具体化?

对象

创建对象的语法是什么?

类名 对象名 = new 类名();//这跟创建数组类似

对象名.属性

对象名.方法

 

三、封装及this

封装有两层含义,对功能的封装,比如就是我们的方法,方法就代表一个功能的实现;

另一层含义,是对数据的封装,比如手机的价格等等

问题:

上述案例都有共同的问题,老师的年龄或手机的价格都可以给其负数,但应该是不合理的,怎么解决这样的问题?

Java为我们提供了一种解决方案(面向对象的三大特征之一:封装

步骤:

1.属性私有化

2.对属性提供getset方法

新问题:

   名字相同的问题

   解决方案引入this关键字

案例演示:

编写标准的封装特性代码,分别解决上述的学生和手机类存在的问题

 

this访问本类的构造方法:

小结:

l this访问本类的成员属性

l this访问本类的成员方法

this访问本类的构造方法(讲到构造方法的时候,我们再来补充)

四、构造方法

什么是构造方法,当我们要创建一个对象的时候就会使用到构造方法,可以实现对象的创建及对象信息的初始化工作

构造方法的使用及细节

1.构造方法的语法格式

访问修饰符 类名(参数列表){

    方法体;

}

2.默认构造方法

3.带参的构造方法

4.默认特性,系统默认会给我们提供一个无参的构造方法

练习:采用带参的构造方法来实现对象的创建,并验证系统提供无参构造方法的机制。

 

 

五、考点:成员变量和局部变量的区别

成员变量和局部变量的区别?笔试考点

成员变量:

定义在类中,跟成员方法同级别

局部变量:

方法的参数,或者定义在方法内的变量

1),位置不同,导致作用域不同

2),生命周期不同

3),内存的位置不同(后面讲对象内存图时再讲)

4),初始值不同,局部变量默认不给初始化,需要你自己去初始化,才能使用

5),奇葩考点,成员变量和局部变量同名的情况,考优先级问题

六、作业

1.课堂案例

2.举生活案例说明面向对象和面向过程的思想区别

面向过程:面向过程的思想是把一个项目、一件事情按照一定的顺序,从头到尾一步一步地做下去,先做什么,后做什么,一直到结束。这种思想比较好理解,其实这也是一个人做事的方法。  

面向对象:面向对象的思想是把一个项目、一件事情分成更小的项目,或者说分成一个个更小的部分,每一部分负责什么方面的功能,最后再由这些部分组合而成为一个整体。这种思想比较适合多人的分工合作,就像一个大的机关,分成各个部门,每个部门分别负责某样职能,各个部门可以充分发挥自己的特色,只要符合一定前提就行了。

比如:在一个玩具工厂。

从面向过程来看,是三天生产飞机,三天生产火车,三天生产船,再过一天运去码头销往海外。

从面向对象来看,是分:生产部,监督部,销售部,采购部,包装部。

 

3.编写一个学生类,我们关注姓名,年龄,学历等信息,要求年龄必须在19-40岁之间,默认为19,学历必须是大专,本科,研究生这几个值的范围内,默认为大专。创建对象,测试其相关方法

代码如下:

public class Student1 {String name;private int age;private String degree;public void setAge(int age){if(age>=19||age<=40){this.age = age;}else{this.age = 0;System.out.println("默认为19");}}public void setDegree(String degree){if(!degree.equals("大专")&&!degree.equals("本科")&&!degree.equals("研究生")){this.degree = degree;}else{this.degree = "大专";System.out.println("默认为大专");}}public int getAge(){return age;}public String getDegree(){return degree;}}



public class Student1Test {public static void main(String[] args){Student1 student = new Student1();student.setAge(20);student.name = "易建联";student.setDegree("本科");System.out.println("名字:"+student.name);System.out.println("学历:"+student.getDegree());System.out.println("年龄:"+student.getAge());}}



4.封装一个学生类,有姓名,有年龄,有性别,有英语成绩,数学成绩,语文成绩,封装方法,求总分,平均分,最高分,最低分,以及打印学生的信息。创建对象,测试其相关方法 

代码如下:

public class Student2 {private String name;private int age;private String sex;private int English;private int Chinese;private int Math;public void setAge(int age){this.age = age;}public void setName(String name){this.name = name;}public void setSex(String sex){this.sex = sex;}public void setEnglish(int English){this.English = English;}public void setChinese(int Chinese){this.Chinese = Chinese;}public void setMath(int Math){this.Math = Math;}public int getAverage(){return (Math+English+Chinese)/3;}public int getTotal(){return Math+English+Chinese;}public int getMaxGrade(){int a = Math>English?Math:English;int b = Chinese>a?Chinese:a;return b;}public int getMinGrade(){int a = Math<English?Math:English;int b = Chinese<a?Chinese:a;return b;}public void showInfo(){System.out.println("名字:"+name);System.out.println("年龄:"+age);System.out.println("性别:"+sex);}}

public class Student2Test {public static void main(String[] args){Student2 student = new Student2();student.setAge(20);student.setName("易建联");student.setSex("男");student.setEnglish(118);student.setChinese(103);student.setMath(118);student.showInfo();System.out.println("总分:"+student.getTotal());System.out.println("平均分:"+student.getAverage());System.out.println("最高分:"+student.getMaxGrade());System.out.println("最低分:"+student.getMinGrade());}}


5.难度:编写一个随机点名系统,两个功能,一个是抽取学员回答问题,一个是记录学员被命中的次数 

本次抽中学员为:保罗

是否继续抽取学员回答问题?(y/n)

y

本次抽中学员为:韦德

是否继续抽取学员回答问题?(y/n)

y

本次抽中学员为:安东尼

是否继续抽取学员回答问题?(y/n)

y

本次抽中学员为:科比

是否继续抽取学员回答问题?(y/n)

y

本次抽中学员为:安东尼

是否继续抽取学员回答问题?(y/n)

y

本次抽中学员为:保罗

是否继续抽取学员回答问题?(y/n)

y

本次抽中学员为:安东尼

是否继续抽取学员回答问题?(y/n)

n

谢谢使用!本次学员命中信息如下:

姓名 命中次数

科比 1

詹姆斯 0

安东尼 3

保罗 2

韦德 1

Student

name+count

String[]

Student[]

代码如下:

import java.util.Scanner;public class dianMing{public static void main(String[] args){Student3[] stu = new Student3[5];for(int i = 0;i<=4;i++){Student3 stu1 = new Student3();stu[i]=stu1;}stu[0].setInfo("科比");stu[1].setInfo("詹姆斯");stu[2].setInfo("安东尼");stu[3].setInfo("保罗");stu[4].setInfo("韦德");Scanner sc = new Scanner(System.in);int lucky;String choose;do{lucky = (int)(Math.random()*5);System.out.println("本次命中学员为:"+stu[lucky].name);stu[lucky].count++;System.out.println("是否继续抽取学员回答问题?(y/n)");choose = sc.next();}while(choose.equals("y"));System.out.println("谢谢使用!本次学员命中信息如下:");System.out.println("姓名命中次数");for(int i = 0;i<=4;i++){System.out.println(stu[i].name+""+stu[i].count);}}}

 
public class Student3 {String name;int count = 0;public void setInfo(String name){this.name = name;}}

0 0
原创粉丝点击