1.面向对象程序设计有三大特点,分别是封装,继承,多态,接下来就介绍一下这三个特点,积累一下。

2.封装,封装是面向对象编程的核心思想,将对象的属性和行为封装起来,而将对象的属性和行为封装起来的载体是类,类通常对用户隐藏其实现的细节,这就是封装的思想,在Java中通常通过建立一个实体类,用来封装对象的属性和行为,通过setXxx()和getXxx()方法封装起来,例如,用户在使用一款软件的时候,只需知道如何使用软件,点击某个按钮就可以实现一定的功能,用户不需要知道软件是如何被开发出来的,软件内部是如何工作的,在使用该软件时不依赖于开发时的细节和软件内部工作的细节。

采用封装的思想保证了类内部数据结构的完整性,应用该类的用户不能轻易直接操纵该数据结构,而只能执行该类允许公开的数据。这样可以避免外部对内部数据的影响,提高程序的可维护性。

总结一下,封装性就是利用抽象数据类型将数据和基于数据的操作封装在一起,保护数据并隐蔽具体的细节,只保留有限的接口与外界联系。

接下来附上一个封装的例子,定义一个实体类,声明属性为私有的,通过setXxx()和getXxx()的公共方法来封装数据(即封装属性),利用this关键字来引用成员变量,最后通过建立一个测试类来调用setXxx()和getXxx()方法,其中实体类中有两个构造方法,一个为无参构造方法,一个为有参构造方法,代码如下所示:

Student.java文件,实体类代码:

package tom.bean;/** 学生实体类*/
public class Student {private String name;// 声明一个私有字符串变量,表示姓名private int age;// 声明一个私有整型变量,表示年龄private String sex;// 声明私有一个私有字符串变量,表示性别private String major;// 声明一个私有字符串变量,表示专业public Student() { // 无参构造方法}public Student(String name, int age, String sex, String major) { // 有参构造方法this.name = name;this.age = age;this.sex = sex;this.major = major;}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 getMajor() {    //获得专业的方法return major;}public void setMajor(String major) { //设置专业的方法this.major = major;}}

Test.java文件,测试类代码:

package tom.test;import tom.bean.Student;public class Test {public static void main(String[] args){Student student=new Student();//实例化Student对象/*设置各个属性的内容*/student.setName("Lc");student.setAge(22);student.setSex("男");student.setMajor("软件工程专业");/*获得学生各个属性的内容,打印输出信息*/System.out.print("第一位学生的信息如下:"+"\n"+"姓名为"+student.getName());System.out.print(",年龄为"+student.getAge());System.out.print(",性别为"+student.getSex());System.out.print(",专业为"+student.getMajor());Student student1=new Student("123nh", 21, "女", "英语专业");System.out.print("\n");System.out.print("第二位学生的信息如下:"+"\n"+"姓名为"+student1.getName());System.out.print(",年龄为"+student1.getAge());System.out.print(",性别为"+student1.getSex());System.out.print(",专业为"+student1.getMajor());}
}

运行测试类后结果如下:

3.继承性,简单来说就是使子类的对象拥有父类的全部属性和行为,同时可以增添自己的所特有的属性和行为。这样可以节省写共同具有的属性和方法代码的时间,有利于代码的复用,这就是继承的基本思想。软件的代码使用继承思想可以缩短软件开发的时间,复用那些已经定义好的类可以提高系统和软件的性能,减少系统和软件在使用过程中出现错误的几率。一个类可以是其他类的父类,为其他类提供属性和行为,也可以是其他类的子类,继承父类的属性和方法,子类的实例都是父类的实例,但不能说父类的实例是子类的实例。

继承的实现,在Java语言中,继承通过extends关键字来实现,用这个extends关键字时指明当前的类为子类,并指明从哪个类继承而来,即在子类的声明中,通过使用extends关键字来指明其父类,其基本格式如下:

修饰符 class 子类名 extends 父类名{

类体

}

接下来附上一个小例子,定义一个People类,其中有姓名,年龄和性别属性和setXxx()和getXxx()的方法,作为父类,在定义一个Student类,继承于父类,作为子类,在子类中只定义2个属性,一个学号,一个专业,再定义一个Test测试类,实例化子类,利用子类对象调用父类的属性和方法,具体见代码:

目录结构如下图:

People.java文件代码:

package tom.bean;/** 定义一个人类,作为Student的父类*/
public class People {private String name;//声明一个私有变量,表示姓名private int age;//声明一个私有变量,表示年龄public String sex="男";//声明一个公有变量,表示性别,初始化为男public People() {  //无参构造方法}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;}}

Student.java文件代码:

package tom.bean;/** 定义一个学生类,继承于人类,作为子类*/
public class Student extends People{private String stuId;//声明一个变量,表示学号private String major;//声明一个变量,表示专业public Student(){ //定义无参构造方法      }public String getStuId() { //获得学号方法return stuId;}public void setStuId(String stuId) {  //设置学号方法this.stuId = stuId;}public String getMajor() { //获得专业方法return major;}public void setMajor(String major) {  //设置专业方法this.major = major;}}

Test.java文件的代码:

package tom.test;import tom.bean.Student;/** 测试类,实例化子类,调用父类的属性和方法,也调用自己所特有的方法*/
public class Test {//主方法public static void main(String[] args) {Student student = new Student();//实例化Student类student.setName("Xg");//调用父类People类的设置姓名的方法student.setAge(22);//调用父类People类的设置年龄的方法student.setStuId("2012131735");//调用Student类的设置学号的方法student.setMajor("软件工程");//调用Student类的设置专业的方法/*打印输出学生信息*/System.out.println("学生信息如下:");System.out.print("姓名为"+student.getName());System.out.print(",年龄为"+student.getAge());System.out.print(",性别为"+student.sex);System.out.print(",学号为"+student.getStuId());System.out.print(",专业为"+student.getMajor());}
}

运行Test.java文件后,结果如下图所示:

4.多态性,简单来说就是一个程序中同名的多个不同方法共存的情况,通常使用方法的重载和重写(也叫覆盖)来实现类的多态性,多态性允许以统一的风格编写程序,以处理种类繁多的已存在的类以及相关类,多态的实现并不依赖具体类,而是依赖抽象类和接口,在多态的机制中,父类通常会被定义为抽象类,在抽象类中给出一个方法的标准,而不给出实现的具体过程,通过继承父类来实现,而比抽象类更方便的是将抽象类定义为接口。这里先暂时介绍到这里,多态中使用方法的重写和重载以后在专门写一篇文章!以免这篇文章篇幅过长!

5.以上就是面向对象程序设计的三大特点,仅供大家学习参考,写得不好请见谅,如有错误请指出,谢谢!

面向对象的特点,封装性,继承性,多态性!相关推荐

  1. 面向对象:封装性,继承性,多态性

    面向对象是一种符合人类思维习惯的编程思想.现实生活中存在各种形态的事物,这些事物之间存在各种各样的联系.在程序中使用对象映射现实中的事物,使用对象的关系描述事物之间的联系,这种思想就是面向对象. 文章 ...

  2. java子类创建过程_JAVA入门小小白学习中ing(匿名对象、封装性、继承性、子类对象的创建过程、spuer关键字(用法一))...

    小小白慢慢学习中ing 第十二天 努力努力 本日内容(匿名对象.封装性.继承性.子类对象的创建过程.spuer关键字) 1.匿名对象 创建对象的语法:Person p1 = new Person(); ...

  3. java的封装性_Java10-java语法基础(九)——java的封装性

    Java10-java语法基础(九)--java的封装性 一.Java的三大特性:封装.多态.继承 封装:通过类封装对象的数据成员和成员方法,保证只有可信的类或者对象能够访问这些方法和数据成员,对不可 ...

  4. 局部变量和成员变量;Java的封装性;private关键字和this关键字

    局部变量和成员变量的区别: 定义的位置不一样[重点] 局部变量在方法内: 成员变量在方法外,类以内: 作用范围不一样[重点] 成员变量在整个类都可以用 默认值不一样[重点] 成员变量在没有赋值的情况下 ...

  5. Python基础学习——面向对象编程(第一讲:面向对象概述、面向对象三个基本特征(封装性、继承性、多态性)、类和对象(定义类、创建和使用对象、实例变量、类变量、构造方法、实例方法、类方法、静态方法))

    面向对象是Python最重要的特性,在Python中一切数据类型都是面向对象的. 1.面向对象概述 面向对象的编程思想是,按照真实世界客观事物的自然规律进行分析,客观世界中存在什么样的实体,构建软件系 ...

  6. 面向对象(详解):三大特征【封装性、继承性、多态性】

    目录 封装性 封装性的设计思想 Java规定的四种权限修饰符  继承性 继承性的好处 类继承语法规则 子类继承父类以后的特点 多态性(重要) 引用变量的两个类型 编译时类型 运行时类型 多态的应用举例 ...

  7. 面向对象:封装性、继承性、多态性总结

    文章目录 一.封装性 1.针对属性的封装性 2.针对方法的封装性 3.权限修饰符的大小关系 4.具体的权限范围 二.继承性 1.继承性的好处 2.子类和父类的关系 三.多态性 1.多态性的理解 2.何 ...

  8. Java新职篇:多态性、封装性与继承性相互作用是什么?

    如果用得当,在由多态性.封装性和继承性共同组成的编程环境中可以写出比面向过程模型环境更健壮.扩展性更好的程序.精心设计的类层级结构是重用你花时间和努力改进并测试过的程序的基础,封装可以使你在不破坏依赖 ...

  9. C++设计模式-面向对象程序设计要点以及封装性特点

    目录 1.面向对象程序设计要点 2.单使用封装性的例子 1.面向对象程序设计要点 面向对象程序设计要注意什么: 注意3点: 1.可维护性: 2.可扩展性: 3.可复用性: 4.灵活性好: 注意:要尽可 ...

最新文章

  1. JQuery笔记(一)
  2. (转)android 在电脑上显示真机屏幕
  3. java查看sql视图_SQL视图与MS Access查询
  4. oracle mysql sql serve where in 语句的不同
  5. ORACLE使用copy方式存储迁移,详细讲解Oracle数据库的数据迁移方法
  6. phpexcel 获取工作簿名称_工作分享 | Excel快速汇总考勤
  7. 开源SUP对接API卡盟程序卡信乐v2.0源码
  8. VS2010平台下OpenCV编译和安装
  9. mysql与串口通信_串口通信 - ShawnXie - 博客园
  10. dmidecode 硬件查看
  11. Kotlin-高阶函数
  12. luogu2508 [HAOI2008]圆上的整点
  13. ceph12.0.1的源码编译安装
  14. NavicatPremium-Mac-无法打开问题
  15. 关于Loadrunner11破解的各种问题。。。泪奔。。。
  16. 悟空CRM系统学习心得
  17. java开发手机app_java 怎么开发手机app接口?
  18. 去中心化的联邦图神经网络
  19. 在线电子书阅读微信小程序 毕业设计(4)图书详细页-图书目录
  20. 【OpenCV 例程 300篇】249. 特征描述之视网膜算法(FREAK)

热门文章

  1. amaze ui响应式辅助
  2. python-Generalization of Hops
  3. 套接字初始化失败问题
  4. ThinkPHP - F函数,更新配置文件
  5. MongoDB之Java测试代码(DAO层)
  6. 利用 PicGo 实现 MarkDown 自动上传图片
  7. 常见损失函数及正则项
  8. c语言链表递增,[C语言][PTA][2019Fall] 6-28 递增的整数序列链表的插入 (15 point(s))
  9. base-64 字符串中的无效字符。_查找字符串中连续不重复最长字符串和长度的方法...
  10. python sql逐行读取数据库数据,使用python读取数据库中的内容 把爬虫爬到的内容,存储在mysql数据库中...