前言:
现在你们对“java的面向对象三大特性”大致比较关心,姐妹们都需要知道一些“java的面向对象三大特性”的相关内容。那么小编在网摘上汇集了一些对于“java的面向对象三大特性””的相关知识,希望大家能喜欢,朋友们一起来了解一下吧!面向对象
面向对象
OO(Object Oriented),20世纪80年代后,有了面向对象分析(OOA)、 面向对象设计(OOD)、面向对象程序设计(OOP)等新的系统开发方式模型的研究。
Java是面向对象的编程语言,对象就是面向对象程序设计的核心,所谓对象就是真实世界中的实体,对象与实体是一一对应的,也就是说现实世界中每一个实体都是一个对象,它是一种具体的概念。
面向对象对象的特点:1、对象具有属性和行为;2、对象具有变化的状态;3、对象具有唯一性;4、对象都是某个类别的实例;5、一切皆为对象,真实世界中的所有事物都可以视为对象。
面向对象开发有利于开拓思维,在具体的开发过程中便于程序的划分,方便程序员分工合作,提高开发效率。
面向对象开发的优点
1、可重用性:代码重复使用,减少代码量,提高开发效率。下面介绍的面向对象的三大核心特性(继承、封装和多态)都围绕这个核心。
2、可扩展性:指新的功能可以很容易地加入到系统中来,便于软件的修改。
3、可管理性:能够将功能与数据结合,方便管理。
面向对象的特性
1、继承性
程序中的继承性是指子类拥有父类的全部特征和行为,这是类之间的一种关系,Java只支持单继承。
2、封装性
封装是将代码及其处理的数据绑定在一起的一种编程机制,该机制保证了程序和数据都不受外部干扰且不被误用,封装的目的在于保护信息。
主要优点:
·保护类中的信息,它可以阻止在外部定义的代码随意访问内部代码和数据;
·隐藏细节信息,一些不需要程序员修改和使用的信息,如:取款机中的键盘,用户只需要知道按哪个键实现什么操作就可以,至于它内部是如何运行的,用户不需要知道。
·有助于建立各个系统之间的松耦合关系,提高系统的独立性,当一个系统的实现方式发生变化时,只要它的接口不变,就不会影响其他系统的使用。如:U盘,不管里面的存储方式怎么改变,只要U盘上的USB接口不变,就不会影响用户的正常操作。
·提高软件的复用率,降低成本,每个系统都是一个相对独立的整体,可以在不同的环境中得到使用。例如,一个U盘可以在多台电脑上使用。
3、多态性
面向对象的多态性,即:一个接口,多个方法。
多态性体现在父类中定义的属性和方法被子类继承后,可以具有不同的属性或表现方式。
多态性允许一个接口被多个同类使用,弥补了单继承的不足,多态概念可以用树形关系来表示。
面向对象的案例代码
封装,案例代码
public class Student { private String studentNo; private String studentName; private String studentSex; private int studentAge; //方案三,将学科对象作为属性 private Subject subject; public Subject getSubject() { if (subject == null) subject = new Subject(); return subject; } public void setSubject(Subject subject) { this.subject = subject; } //无参构造 public Student() { } //多参构造,实现对全部属性的赋值 public Student(String studentNo, String studnetName, String studentSex, int studentAge) { this.setStudentNo(studentNo); this.setStudentName(studnetName); this.setStudentSex(studentSex); this.setStudentAge(studentAge); } //将Subject对象初始化的构造函数 public Student(String studentNo, String studnetName, String studentSex, int studentAge, Subject subject) { this.setStudentNo(studentNo); this.setStudentName(studnetName); this.setStudentSex(studentSex); this.setStudentAge(studentAge); this.setSubject(subject); } public String getStudentNo() { return studentNo; } public void setStudentNo(String studentNo) { this.studentNo = studentNo; } public String getStudentName() { return studentName; } public void setStudentName(String studentName) { this.studentName = studentName; } public String getStudentSex() { return studentSex; } public void setStudentSex(String studentSex) { if (studentSex == "男" || studentSex == "女") this.studentSex = studentSex; else return; } public int getStudentAge() { return studentAge; } public void setStudentAge(int studentAge) { if (studentAge <= 0 || studentAge > 100) studentAge = 18; this.studentAge = studentAge; } /** * 介绍学生详细信息的方法(新增方法参数) * * @return 返回学生姓名、学号、年龄、性别、专业名称、学制年限等信息 */ public String studentInfo(String subjectName, int subjectTime) { String ref = "学生详细信息:\n学生姓名:" + this.getStudentName() + "\n学生学号:" + this.getStudentNo() + "\n学生年龄:" + this.getStudentAge() + "\n学生性别:" + this.getStudentSex() + "\n所学专业名称:" + subjectName + "\n学制年限:" + subjectTime; return ref; } /** * 学生详细信息介绍的方法重载(将对象作为方法参数) * * @return 返回学生姓名、学号、年龄、性别、专业名称、学制年限等信息 */ public String studentInfo(Subject subject) { String ref = "学生详细信息:\n学生姓名:" + this.getStudentName() + "\n学生学号:" + this.getStudentNo() + "\n学生年龄:" + this.getStudentAge() + "\n学生性别:" + this.getStudentSex() + "\n所学专业名称:" + subject.getSubjectName() + "\n学制年限:" + subject.getSubjectTime(); return ref; } /** * 返回学生相信信息介绍方法(将对象作为类的属性) * * @return 返回学生姓名、学号、年龄、性别、专业名称、学制年限等信息 */ public String studentInfo() { String ref = "学生详细信息:\n学生姓名:" + this.getStudentName() + "\n学生学号:" + this.getStudentNo() + "\n学生年龄:" + this.getStudentAge() + "\n学生性别:" + this.getStudentSex() + "\n所学专业名称:" + this.getSubject().getSubjectName() + "\n学制年限:" + this.getSubject().getSubjectTime(); return ref; }}
public class Subject { /* * 封装的步骤一:将属性设置为私有,禁止类外部进行访问 */ private String subjectName; //专业名称 private String subjectNum; //专业编号 private int subjectTime; //专业学时 private Student[] studentArray; //用来存储选修某专业的学生对象 private int studentCount; //记录选修某专业的人数 public Student[] getStudentArray() { if (studentArray == null) this.studentArray = new Student[200]; return studentArray; } public void setStudentArray(Student[] studentArray) { this.studentArray = studentArray; } //无参构造方法 public Subject() { } //有参构造方法 public Subject(String subjectName, String subjectNum, int subjectTime) { this.setSubjectName(subjectName); this.setSubjectNum(subjectNum); this.setSubjectTime(subjectTime); } //有参构造 public Subject(String subjectName, String subjectNum, int subjectTime, Student[] studentArray) { this.setSubjectName(subjectName); this.setSubjectNum(subjectNum); this.setSubjectTime(subjectTime); this.setStudentArray(studentArray); } public int getStudentCount() { return studentCount; } public void setStudentCount(int studentCount) { this.studentCount = studentCount; } /* * 封装类的步骤二:设置类外部访问属性的接口 * 封装类 的步骤三:通过getter/setter方法添加控制语句 */ //预留访问类的接口 public void setSubjectName(String subjectName) { this.subjectName = subjectName; } public String getSubjectName() { return this.subjectName; } public void setSubjectNum(String SubjectNum) { this.subjectNum = SubjectNum; } public String getSubjectNum() { return this.subjectNum; } public void setSubjectTime(int subjectTime) { if (subjectTime <= 0) return; this.subjectTime = subjectTime; } public int getSubjectTime() { return this.subjectTime; } //在类中编写一个输出详细信息的方法 public String printDetail() { String ref = "专业详细信息为:\n专业名称:" + this.getSubjectName() + "\n专业编号:" + this.getSubjectNum() + "\n学时:" + this.getSubjectTime(); return ref; } /** * 添加学员到数组中并记录数组中成员个数 * * @param student 传递进入方法的学生对象 */ public void addStudent(Student student) { for (int i = 0; i < this.getStudentArray().length; i++) { if (this.getStudentArray()[i] == null) { this.getStudentArray()[i] = student; this.studentCount = i + 1; return; } } }}
public class CharDemo { public static void main(String[] args) { Subject subject = new Subject("计算机科学与应用", "j0001", 4); System.out.println(subject.printDetail()); System.out.println("-------------在方法中通过新增参数实现扩展-------------"); Student student = new Student("s01", "张三", "男", 18); System.out.println(student.studentInfo("计算机科学与应用", 4)); System.out.println("------------将对象作为方法参数--------------"); Student student1 = new Student("s02", "李四", "女", 28); System.out.println(student1.studentInfo(subject)); System.out.println("-------------将对象作为类的属性-------------"); Student student2 = new Student("s03", "王五", "女", 17, subject); System.out.println(student2.studentInfo()); System.out.println("-------------想知道一个专业到底有多少个学生选修-------------"); subject.addStudent(student2); subject.addStudent(student1); subject.addStudent(student); System.out.println("选修" + subject.getSubjectName() + "专业的学生有" + subject.getStudentCount() + "名"); }}
多态,案例代码
public class Animal { // 姓名 private String name; // 空参构造 public Animal() { } // 全参构造 public Animal(String name) { this.name = name; } public String getName() { return name; } public void setName(String name) { this.name = name; } // 成员方法 public void eat() { System.out.println("吃饭"); }}
// 是Animal类的子类public class Dog extends Animal { // 需求:因为狗吃骨头,所以要优化父类的eat()方法 @Override public void eat() { System.out.println(getName() + "吃骨头"); }}
public class Demo { public static void main(String[] args) { /* Java中实现多态的三个步骤: 1、要有继承(或者实现)关系 2、要有方法重写 3、要有父类引用指向子类对象 */ // 多态 Animal animal = new Dog(); // 测试成员方法的调用 // 结论:多态中调用成员方法时编译看左(左边的类型有没有这个成员), // 运行看右(运行时具体用的是右边类中的该成员) animal.setName("哈士奇"); animal.eat(); }}
标签: #java的面向对象三大特性