1、纲要面向过程与面向对象的区别面向对象的三大特性 类与对象的概念类的定义 对象的创建和使用Java 中的封装特性构造函数 对象内存分析及引用传递 this 关键字static 关键字单例模式初步类的继承 方法的覆盖super 关键字final 关键字抽象类 接口多态 抽象类与接口的区别 Object 类package 和 import 访问权限控制 内容1.1、面向过程与面向对象的区别(盖饭、蛋炒饭)为什么会出现面向对象分析方法? 因为现实世界太复杂多变,面向过程的分析方法无法满足面向过程? 采用面向过程必须了解整个过程,每个步骤都有因果关系,每个因果关系都构成了一个步骤, 多个步java 基础 面向对象 视频骤就构成了一个
2、系统,因为存在因果关系每个步骤很难分离,非常紧密,当任何一步骤出现问题,将会影响到所有的系统。如:采用面向过程生产电脑,那么他不会分 CPU、主板和硬盘,它会按照电脑的工作流程一次成型。 面向对象? 北京动力节点 1面向对象对会将现实世界分割成不同的单元(对象),实现各个对象,如果完成某个功能, 只需要将各个对象协作起来就可以。 1.2、面向对象的三大特性封装继承多态1.3、类与对象的概念类是对具有共性事物的抽象描述,是在概念上的一个定义,那么如何发现类呢? 通常根据名词(概念)来发现类,如在成绩管理系统中:学生、班级、课程、成绩学生张三班级6
3、02 课程J2SE成绩张三成绩 以上“张三”、“602”、“J2SE”和“张三的成绩”他们是具体存在的,称为对象,也叫实例 也就是说一个类的具体化,就是对象或实例 为什么面向对象成为主流技术,主要就是因为更符合人的思维模式,更容易的分析现实世界, 所以在程序设计中也采用了面向对象的技术,从软件的开发的生命周期来看,基于面向对象可以分为三个阶段: OOA(面向对象的分析) OOD(面向对象的设计) OOP(面向对象的编程)Java 就是一个纯面向对象的语言我们再进一步的展开,首先看看学生: 学生:学号、姓名、性别、地址,班级班级:班级代码、班级名称 课程:课程代码、课程名称成绩:学生、课程、成绩
4、 大家看到以上我们分析出来的都是类的属性接下来采用简易的图形来描述一下,来描述我们的概念(来源成绩管理系统的概念,来源于 领域的概念,这个领域就是成绩系统管理领域) 北京动力节点 2以上描述的是类的属性,也就是状态信息,接下来,再做进一步的细化通过以上分析,大家应该了解: 类=属性+方法 属性来源于类的状态,而方法来源于动作以上模型完全可以使用面向对象的语言,如Java 来实现 北京动力节点 31.4、类的定义在Java 中如何定义类? 具体格式: 【示例代码】以上属性称为成员变量,局部变量是在
5、方法中定义的变量,方法的参数,方法的返回值,局 部变量使用前必须初始化,而成员变量会默认初始化,初始化的值名为该类型的默认值 1.5、对象的创建和使用(必须)使用 new 创建出来,才能用。 【示例代码】 北京动力节点 4public class OOTest01 public static void main(String args) /创建一个对象 Student zhangsan = new Student(); System.out.println(id= + zhangsan.id); System.out.println(name=
6、 + );public class Student /学号int id;/ 姓 名 String name;/性别boolean sex;/ 地 址 String address;/年龄int age;类的修饰符 class 类名 extends 父对象名称 implements 接口名称 类体:属性和方法组成 具体默认值如下:对成员变量进行赋值北京动力节点 5public class OOTest02 类型 默认值 byte0short0int0long0Lcharu0000float0.0fdouble0.0dbo
7、oleanfalse引用类型 nullSystem.out.println(sex= + zhangsan.sex); System.out.println(address= + zhangsan.address); System.out.println(age= + zhangsan.age);class Student /学号int id;/ 姓 名 String name;/性别boolean sex;/ 地 址 String address;/年龄int age;一个类可以创建N 个对象,成员变量只属于当前的对象(只属于对象,不属于类),只有通 北京动力节点 http:/www.bjp
8、6public static void main(String args) /创建一个对象 Student zhangsan = new Student(); zhangsan.id = 1001; = 张 三 ; zhangsan.sex = true; zhangsan.address = 北 京 ; zhangsan.age = 20;System.out.println(id= + zhangsan.id); System.out.println(name= + ); System.out.println(s
9、ex= + zhangsan.sex); System.out.println(address= + zhangsan.address); System.out.println(age= + zhangsan.age);class Student /学号int id;/ 姓 名 String name;/性别boolean sex;/ 地 址 String address;/年龄int age;过对象才可以访问成员变量,通过类不能直接访问成员变量 以上程序存在缺点,年龄可以赋值为负数,怎么控制不能赋值为负数?1.6、面向对象的封装性控制对年龄的修改,年龄只能为大于等于 0 并且小于等于 120
10、 的值 北京动力节点 7public class OOTest03 public static void main(String args) /创建一个对象 Student zhangsan = new Student();/*zhangsan.id = 1001; = 张三; zhangsan.sex = true; zhangsan.address = 北京; zhangsan.age = 20;*/ zhangsan.setId(1001);zhangsan.setName(张三); zhangsan.setS
11、ex(true); zhangsan.setAddress(北京); zhangsan.setAge(-20);System.out.println(id= + zhangsan.id); System.out.println(name= + ); System.out.println(sex= + zhangsan.sex); System.out.println(address= + zhangsan.address); System.out.println(age= + zhangsan.age);class Student /学号int id;/ 姓 名 St

12、ring name;/性别 北京动力节点 8boolean sex;/ 地 址 String address;/年龄int age;/设置学号 public void setId(int studentId) id = studentId;/ 读 取 学 号 public int getId() return id;public void setName(String studentName) name = studentName;public String getName() return name;public void setSex(bo
13、olean studentSex) sex = studentSex;public boolean getSex() return sex;public void setAddress(String studentAddress) address = studentAddress;public String getAddress() return address;public void setAge(int studentAge) 从上面的示例,采用方法可以控制赋值的过程,加入了对年龄的检查,避免了直接操纵student属性,这就是封装,封装其实就是封装属性,让外界知道这个类的状态越少越好。以
14、上仍然不完善,采用属性仍然可以赋值,如果掉属性的赋值,只采用方法赋值,如下: 北京动力节点 9public class OOTest04 public static void main(String args) /创建一个对象 Student zhangsan = new Student(); zhangsan.id = 1001; = 张 三 ; zhangsan.sex = true; zhangsan.address = 北 京 ; zhangsan.age = 20;/* zhangsan.setId(100
15、1);zhangsan.setName(张三); zhangsan.setSex(true); zhangsan.setAddress(北京); zhangsan.setAge(20);*/*System.out.println(id= + zhangsan.id); System.out.println(name= + ); System.out.println(sex= + zhangsan.sex); System.out.println(address= + zhangsan.address); System.out.println(age= + zhangs
16、an.age);*/System.out.println(id= + zhangsan.getId(); System.out.println(name= + zhangsan.getName(); System.out.println(sex= + zhangsan.getSex();System.out.println(address= + zhangsan.getAddress();if (studentAge =0 & studentAge =0 & studentAge =0 & studentAge =0 & studentAge =0 & studentAge =0 & stud
17、entAge 李四sex=trueaddress=北京age=20栈 main 方法栈帧student=堆中 student 对象地址 method1 方法栈帧temp=堆中student 对象地址 =李四 public static void method1(Student temp) =李四;class Student /学号int id;/ 姓 名 String name;/性别boolean sex;/ 地 址 String address;/年龄int age;到栈中 2、 将 Student 对象放到堆区中,并赋值 3、 调用 method1 方
18、法,创建method1 方法栈帧 4、 将局部变量 student 引用(也就是 student 对象的地址),传递到 method1 方法中,并赋值给 temp5、 此时 temp 和 student 引用指向的都是一个对象 6、 当 method1 方法中将 name 属性改为“李四”时,改的是堆中的属性 7、 所以会影响输出结果,最后的输出结果为:李四 8、 main 方法执行结束,此时的 student 对象还在堆中,我们无法使用了,那么他就变成了“垃圾对象”,java 的垃圾收集器会在某个时刻,将其清除 以上就是址传递,也就是引用的传递 结论:除了基本类型外都是引用传递 1.9、th
19、is 关键字this 关键字指的是当前调用的对象,如果有 100 个对象,将有 100 个 this 对象指向各个对象 this 关键字可以使用在: 部变量和成员变量重名的时候可以使用 this 指定调用成员变量通过 this 调用另一个构造方法 在构造方法中,如果使用 this 方法调用和其他构造方法,那么 this 语句必须放在第 一句。如果不放在第一句,会发生编译错误 需要注意:this 只能用在构造函数和成员方法内部(声明变量也可以用),static 标识的方法里 是不能使用this 的,关于 static 以后再讲 1.9.1、部变量和成员变量重名的时候可以使用 this 指定 调用
20、成员变量 北京动力节点 26public class OOTest08 public static void main(String args) Student zhangsan = new Student(); zhangsan.setId(1001); zhangsan.setName( 张 三 ); zhangsan.setSex(true); zhangsan.setAddress(北京); zhangsan.setAge(20);System.out.println(id= + zhangsan.getId(); System.out
21、.println(name= + zhangsan.getName();北京动力节点 27System.out.println(sex= + zhangsan.getSex(); System.out.println(address= + zhangsan.getAddress(); System.out.println(age= + zhangsan.getAge();class Student / 学 号 private int id;/姓名 private String name;/性别 private boolean sex;/地址 p
22、rivate String address;/ 年 龄 private int age;/设置学号 public void setId(int id) id = id;/ 读 取 学 号 public int getId() return id;public void setName(String name) name = name;public String getName() return name;public void setSex(boolean sex) 输出错误,输出的都是成员变量的默认值,赋值没有起作用,这是为什么? 如:setId(int id) 方法中,我们的赋值语句为 i
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/2219.html