java面向对象的特征:封装,继承,抽象,多态;

--1--.封装:

什么叫做封装?

封装是把过程和数据包围起来,对数据的访问只能通过已定义的接口。

面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。

封装是一种信息隐藏技术,在java中通过关键字private实现封装。什么是封装?封装把对象的所有组成部分组合在一起,封装定义程序如何引用对象的数据,封装实际上使用方法将类的数据隐藏起来,控制用户对类的修改和访问数据的程度。

来个荔枝:

public class Man {//对属性的封装,一个男人有姓名,年龄,妻子这些都属于私有属性private String name;private int age;private Woman wife;//对方法的封装//该人对外界提供的方法封装,可以设定妻子,姓名,年龄,也可以获取他的姓名和年龄(妻子就不能随意获取了)public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public void setWife(Woman wife) {this.wife = wife;}
}
public class Woman {//对属性的封装,一个女人有姓名,年龄,妻子这些都属于私有属性private String name;private int age;private Man husband;//对方法的封装//该人对外界提供的方法封装,可以设定丈夫,姓名,年龄,也可以获取他的姓名,年龄(丈夫也不能随意获取)public void setHusband(Man husband) {this.husband = husband;}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;}
}

这样就可以知道封装可以将对象的一些属性私有化,提供一些可以被外界访问的方法;但是如果有对象有不想让外界访问的属性时不提供相应的方法即可,就如这里的Man的wife属性和Woman的husband属性不提供get方法;

接下来用另外一个荔枝来解释另一个好处:

对方法的封装:

public class Show {public static void show(String str){System.out.println(str);}
}
public class User {public static void main(String[] args){Show.show("封装");}
}

对方法进行封装后就不需要去写:

  System.out.println(str);直接调用Show.show();方法即可;

封装的作用:

1.对象的数据封装特性彻底消除了传统结构方法中数据与操作分离所带来的种种问题,提高了程序的可复用性和可维护性,降低了程序员保持数据与操作内容的负担。

2.对象的数据封装特性还可以把对象的私有数据和公共数据分离开,保护了私有数据,减少了可能的模块间干扰,达到降低程序复杂性、提高可控性的目的。

--2--继承

什么是继承?

继承是面向对象最显著的一个特性。继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力。java继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或新的功能,也可以用父类的功能,但不能选择性地继承父类。这种技术使得复用以前的代码非常容易,能够大大缩短开发周期,降低开发费用。比如可以分隔符先定义一个类叫车,车有以下属性:车体大小,颜色,方向盘,轮胎,而又由车这个类派生出轿车和卡车两个类,为轿车添加一个小后备箱,而为卡车添加一个大货箱。

一些基本特征:

(1)继承关系是传递的。若类C继承类B,类B继承类A,则类C既有从类B那里继承下来的属性与方法,也有从类A那里继承下来的属性与方法,什么是继承?还可以有自己新定义的属性和方法。继承来的属性和方法尽管是隐式的,但仍是类C的属性和方法。继承是在一些比较一般的类的基础上构造、建立和扩充新类的最有效的手段。

(2)继承简化了人们对事物的认识和描述,能清晰体现相关类间的层次结构关系。

(3)继承提供了软件复用功能。若类B继承类A,那么建立类B时只需要再描述与基类(类A)不同的少量特征(数据成员和成员方法)即可。这种做法能减小代码和数据的冗余度,大大增加程序的重用性。

(4)继承通过增强一致性来减少模块间的接口和界面,大大增加了程序的易维护性。

(5)提供多重继承机制。从理论上说,一个类可以是多个一般类的特殊类,它可以从多个一般类中继承属性与方法,这便是多重继承。Java出于    安全性和可靠性的考虑,仅支持单重继承,而通过使用接口机制来实现多重继承。

--3.抽象--

什么是抽象?

用了关键词abstract声明的类叫作"抽象类"。如果一个类里包含了一个或多个抽象方法,类就必须指定成abstract(抽象)。"抽象方法",属于一种不完整的方法,只含有一个声明,没有方法主体(语法:abstract void f();)。

如果从一个抽象类继承,而且想生成新类型的一个对象,就必须为基础类中的所有抽象方法提供方法定义。

如果不这样做(完全可以选择不做),则衍生类也会是抽象的,而且编译器会强迫我们用abstract 关键字标志那个类的“抽象”本质。

即使不包括任何abstract 方法,亦可将一个类声明成“抽象类”。如果一个类没必要拥有任何抽象方法,而且我们想禁止那个类的所有实例,这种能力就会显得非常有用。

抽象类往往用来表征我们在对问题领域进行分析、设计中得出的抽象概念,是对一系列看上去不同,但是本质上相同的具体概念的抽象。比如:如果我们进行一个图形编辑软件的开发,就会发现问题领域存在着圆、三角形这样一些具体概念,它们是不同的,但是它们又都属于形状这样一个概念,形状这个概念在问题领域是不存在的,它就是一个抽象概念。正是因为抽象的概念在问题领域没有对应的具体概念,所以用以表征抽象概念的抽象类是不能够实例化的。

这里我们有不得不谈到抽象和接口的区别:

什么是接口?

Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)。

两种含义:一,Java接口,java语言中存在的结构,有特定的语法和结构;二,一个类所具有的方法的特征集合,是一种逻辑上的抽象。前者叫做"Java接口",后者叫做"接口"。

接口实现和类继承的规则不同,为了数据的安全,继承时一个类只有一个直接父类,也就是单继承,但是一个类可以实现多个接口,接口弥补了类的不能多继承缺点,继承和接口的双重设计既保持了类的数据安全也变相实现了多继承。

在语法上,抽象类和接口有着以下不同:

1.abstract class在Java语言中表示的是一种继承关系,一个类只能使用一次继承关系。但是,一个类却可以实现多个interface。 继承抽象类使用的是extends关键字,实现接口使用的是implements关键字,继承写在前面,实现接口写在后面。如果实现多个接口,中间用逗号分隔。例:

public class Main extends JApplet

public class Main implements Runnable

public class Main extends JApplet implements ActionListener

public class Main extends JApplet implements ActionListener, Runnable

2.在abstract class中可以有自己的数据成员,也可以有非abstract的成员方法,而在interface中,只能够有静态的不能被修改的数据成员(也就是必须是static final的,不过在 interface中一般不定义数据成员),所有的成员方法都是abstract的。

3.abstract class和interface所反映出的设计理念不同。其实abstract class表示的是"is-a"关系,interface表示的是"like-a"关系。

4.实现接口的类必须实现其中的所有方法,继承自抽象类的子类实现所有的抽象方法。抽象类中可以有非抽象方法。接口中则不能有实现方法。

5.接口中定义的变量默认是public static final 型,且必须给其初值,所以实现类中不能重新定义,也不能改变其值。

6.抽象类中的变量默认具有 friendly权限,其值可以在子类中重新定义,也可以重新赋值。

7.接口中的方法默认都是 public abstract 类型的。

--4.多态--

什么是多态?

意义:

1.同一类型的引用指向不同的对象时有不同的实现

---行为多态:cut()方法:对于理发师为剪头发;对于厨师是切菜;对于伐木工是砍树;

2.同一个对象被造型为不同的类型时有不同的功能

---对象的多态:person对象:对于父母是孩子;对于老师是学生;对于孩子是父母

向上造型:

1.父类引用指向子类对象;

2.能造型成的类型:父类以及实现的接口;

class A{public method(){......}
}
class A1 extends A {public method(){......}
}
class A2 extends A{public method(){......}
}

A a=new A1(); 出现多态了,对象的引用指向了他子类A1的new出来的对象  ,method方法的指针已经指向A1的method,当他调用method方法时候,调的就是A1的方法
  a.method(); 调用A1的method方法

A a=new A2(); 出现多态了,对象的引用指向了他子类A2的new出来的对象  ,method方法的指针已经指向A2的method,当他调用method方法时候,调的就是A2的方法
   a.method(); 调用A2的method方法

java面向对象特征相关推荐

  1. Java面向对象特征之三 多态

    文章目录 Java面向对象特征之三 多态 1.多态的定义 2.多态的分类 静多态 动多态 3.向上造型 向上造型的好处 4.多态实例演示 5.多态的实现原理 6.多态的深入理解 6.1 静多态(静态绑 ...

  2. java面向对象特征及阐述,Java面向对象四个特征

    Java面向对象有四个特征:抽象.封装.继承.多态.其中封装.继承.多态又被称为Java的基本特征. 抽象: Java中会把客观事物抽象成一个类.类就是封装了数据以及操作这些数据的代码逻辑实体.用字符 ...

  3. Java面向对象特征介绍

    面向对象不仅仅在java中有体现,在C++中也有.Java面向对象三大特征 封装和隐藏 继承 多态 1.封装和隐藏 Java中通过将数据声明为private私有,再提供公共(public)的方法,ge ...

  4. Java 面向对象特征

    java面向对象的三大特征是什么? 那就是封装.继承.多态. 但说到面向对象,还有一个很主要的特征就是抽象. 封装 每一个类中都会有属性和方法,封装指的就是把属性和方法隐藏起来,只保留一些对外的接口和 ...

  5. Java面向对象特征有那些

    一.java面向对象的特征? 答:java面向对象的特征:封装.继承.多态.抽象. 如果问java面向对象的三大特征是什么?那就是封装.继承.多态, 但说到面向对象,还有一个很主要的特征就是抽象. 1 ...

  6. java继承封装英语怎么说,英语翻译深刻理解JAVA OOP编程,熟练于封装、继承、多态、抽象等JAVA面向对象特征的使用,对常用集合有较深理解,以...

    共回答了16个问题采纳率:87.5% Deep understanding of Java Object Oriented Programming. Able to use encapsulation ...

  7. java面向对象编程 视频_Java8之面向对象编程视频教程

    Java教程之面向对象编程,面向对象是Java语言之中最为重要的特征,本课程主要讲解面向对象的核心知识,并且利用大量的代码.数据结构课程深入分析Java面向对象特征. 课程目录: 课时1:1.面向对象 ...

  8. Java面向对象(二)面向对象的特征 --- 封装 、 继承、 多态

    面向对象的特征:封装.继承.多态.(抽象) 一.封装 体现形式: 函数 --- 提高代码的复用性. 属性的私有化 --- 将属性设为私有,通过提供对外的访问方法来间接操作对象属性,可以再方法内对属性做 ...

  9. 对java面向对象的三大特征的理解_Java面向对象的三大特征是什么?

    面向对象的三大核心特性简介 面向对象开发模式更有利于人们开拓思维,在具体的开发过程中便于程序的划分,方便程序员分工合作,提高开发效率. 该开发模式之所以使程序设计更加完善和强大,主要是因为面向对象具有 ...

最新文章

  1. OpenCV+python:图像金字塔
  2. 一次上机试题(面向对象)
  3. 数据库系统原理(第一章概述)
  4. keepalived实现双机备份
  5. 7-5 简单的代码生成程序-A (10 分)
  6. Spring框架学习[IoC容器高级特性]
  7. MySQL批处理SQL语句
  8. 在线YAML转XML工具
  9. dataframe一列按长度补0_Pandas中Series和DataFrame基础功能详解
  10. linux 指定库名 登录mysql_linux终端mysql用户操作只看这篇够了
  11. oracle归档日志满了的处理方法
  12. 从零开始发布web项目(七)
  13. python(模块)xlsxwriter
  14. python打开ie浏览器_python-IE浏览器调用
  15. 16S扩增子数据提交GSA实操手册—发表文章前必备技能
  16. Simulink仿真计算中保留特定位数的小数
  17. RN组件 - Image图片
  18. 数字的翻译(英文到中文)
  19. React Native腾讯广告优量汇广点通广告SDK集成
  20. 蓝海卓越计费管理系统漏洞学习——download.php 任意文件读取漏洞

热门文章

  1. java堆结构,以及堆中的永久代
  2. react中全屏与退出全屏
  3. yii反序列化漏洞复现及利用
  4. 计算机兴趣小组电脑画图教案,电脑绘画兴趣小组教学教案.doc
  5. 机器人强化学习——Transferring End-to-End Visuomotor Control from Simulation to RealWorld (CoRL 2017)
  6. 卷积神经网络对图片分类-中
  7. 联想小新15怎么样?看完对比便知道
  8. linux expect 详解
  9. 【亲子手工】创建圣诞镇
  10. 第四章 “我要点爆”微信小程序云开发之疯狂点击与糖果点爆页面制作