龙空技术网

Java,面向对象,三大特性:封装、继承和多态,代码案例

古怪今人 144

前言:

现在你们对“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的面向对象三大特性