Java总论及三大特性理解

Wesley13
• 阅读 405

1、对象(object)

    万物皆为对象(根类Object类)。

    程序是对象的集合(面向对象程序设计语言OOP)。

    每个对象都有自己的由其他对象所构成的存储(对象有成员属性)。

    每个对象都拥有其类型(每个对象都是某个类class的一个实例instance)。

某一特定类型的所有对象都可以接收同样的信息(继承)。

2、类型(type)

    类描述具有相同特性(数据元素)和行为(功能)的对象集合。是面向对象设计除了基本数据类型外的,一种通用的数据类型。

3、对象作为“服务提供者”

    提高对象的内聚性,将对象的设计简化,并凸显其提高的服务价值。

    高质量代码的基本要求是:可复用、高内聚、低耦合。

4、封装(信息隐藏)

    指利用抽象数据类型将数据和基于数据的操作封装在一起,使其构成一个不可分割的独立实体,数据被保护在抽象数据类型的内部,尽可能地隐藏内部的细节,只保留一些对外接口使之与外部发生联系。系统的其他部分只有通过包裹在数据外面的被授权的操作来与这个抽象数据类型交流与交互。用户无需知道对象内部方法的实现细节,但可以根据对象提供的外部接口(对象名和参数)访问该对象。

一句话总结:

所谓封装,就是把数据和方法保护在类的内部,只允许可信的类或对象操作,对不可信的进行信息隐藏。

    好处:

(1)实现了专业的分工。

将能实现某一特定功能的代码封装成一个独立的实体后,各程序员可以在需要的时候调用,从而实现了专业的分工。

(2)隐藏信息,实现细节。

通过控制访问权限可以将可以将不想让客户端程序员看到的信息隐藏起来,如某客户的银行的密码需要保密,只能对该客户开发权限。

5、继承(代码复用)

    is-a : 纯粹替代,extends。

    is-like-a : 扩展替代,extends 与 implements。

    子类与父类的关系并不是日常生活中的父子关系,子类与父类而是一种特殊化与一般化的关系,是is-a的关系,子类是父类更加详细的分类。

    继承后子类自动拥有了父类的属性和方法,但特别注意的是,父类的私有属性和构造方法并不能被继承。

    另外子类可以写自己特有的属性和方法,目的是实现功能的扩展,子类也可以复写父类的方法即方法的重写(overriding)。

一句话总结,

所谓继承,就是可以使用现有类的所有数据和方法(包括私有的),并且不需要重复编写现有类,实现功能扩展,达到代码复用。

    注意:设计继承的时候,若要让某个类能继承,父类需适当开放访问权限,遵循里氏代换原则,即向修改关闭对扩展开放,也就是开-闭原则。

6、多态(polymorphism)

    相同接口的对象,调用其相同的方法,参数也相同时,但表现的行为却不同。

多态分为编译时多态(又称静态多态),以及 运行时多态(又称动态多态)。

编译时多态,是指程序在编译过程就可以确认调用哪个方法。

运行时多态,是指程序中的引用对象指向的哪个具体类型,以及该对象通过哪个具体方法调用,在编程中并不能确定,只有在运行时确定。这样,我们可以让引用对象绑定到不同的实现类上,从而实现该对象将有不同的具体方法调用,程序在运行时就有多个运行状态。

实现编译时多态:static、重载

实现运行时多态:继承、重写、向上转型

---------------------------------------历史分割线>>>-----------------------------------------------------

    子类以父类的身份出现,但做事情时还是以自己的方法(请注意是非private方法)实现。

    子类以父类的身份出现需要向上转型(upcast),其中向上转型是由JVM自动实现的,是安全的,但向下转型(downcast)是不安全的,需要强制转换。

     子类以父类的身份出现时自己特有的属性和方法将不能使用。

    注意:以下情况可能多态无效:

1、private方法重载

2、属性同名且可以显式访问

3、static方法同名

Java总论及三大特性理解

---------------------------------------<<<历史分割线-----------------------------------------------------

7、单根继承结构

    所有类都是继承同一个根类(Object类),提供了极大的向后兼容性。

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
2年前
java 复制Map对象(深拷贝与浅拷贝)
java复制Map对象(深拷贝与浅拷贝)CreationTime2018年6月4日10点00分Author:Marydon1.深拷贝与浅拷贝  浅拷贝:只复制对象的引用,两个引用仍然指向同一个对象
从一个 10 年程序员的角度告诉你:搞懂 Java 面向对象有多容易?
前言:1)java面向对象语言,面向过程围绕过程(解决问题步骤),面向对象围绕实体(名词,特性(属性),行为(动作、方法))。它们设计思想区别在于关心核心不同的。主流都是面向对象的。实际开发,先按面向对象思想进行设计,具体实现时面向过程(人习惯)2)java怎么支持面向对象呢?a.万物皆对象,所有的类都是Object子类b.java中支
Wesley13 Wesley13
2年前
java常用类(2)
三、时间处理相关类Date类:计算机世界把1970年1月1号定为基准时间,每个度量单位是毫秒(1秒的千分之一),用long类型的变量表示时间。Date分配Date对象并初始化对象,以表示自从标准基准时间(称为“历元”(epoch),即1970年1月1日08:00:00GMT)以来的指定毫秒数。示例:packagecn.tanjian
顺心 顺心
3年前
Dart 入门中文教程
一、开篇dart语言具有如下特性一切变量皆是对象,每个对象都是类的实例。int、double、null、函数等都是对象,所有对象都继承自Object类dart是强类型语言,但由于具备类型推导功能所以类型声明是可选的dart支持顶级函数、静态函数、实例函数,也允许在函数中嵌套函数,即局部函数。类似的,dart也支持顶级
Wesley13 Wesley13
2年前
java8新特性
Stream将List转换为Map,使用Collectors.toMap方法进行转换背景:User类,类中分别有id,name,age三个属性。List集合,userList,存储User对象1、指定keyvalue,value是对象中的某个属性值。 Map<Integer,StringuserMap1userList.str
Stella981 Stella981
2年前
JS 对象数组Array 根据对象object key的值排序sort,很风骚哦
有个js对象数组varary\{id:1,name:"b"},{id:2,name:"b"}\需求是根据name或者id的值来排序,这里有个风骚的函数函数定义:function keysrt(key,desc) {  return function(a,b){    return desc ? ~~(ak
Wesley13 Wesley13
2年前
JAVA面向对象
一、java面向对象的特征?答:java面向对象的特征:封装、继承、多态、抽象。如果问java面向对象的三大特征是什么?那就是封装、继承、多态,但说到面向对象,还有一个很主要的特征就是抽象。1、封装a)铺垫:Java把真实世界中某些具有共同特征的实体抽象成Java中的类,类的实例就是一个对象,而对象和真实世界的实体是一一
Wesley13 Wesley13
2年前
Java线程中的同步
!(https://static.oschina.net/uploads/space/2018/0207/164552_Gl6r_3643112.jpg)1、对象与锁每一个Object类及其子类的实例都拥有一个锁。其中,标量类型int,float等不是对象类型,但是标量类型可以通过其包装类来作为锁。单独的成员变量是不能被标明为同步
Wesley13 Wesley13
2年前
unity将 -u4E00 这种 编码 转汉字 方法
 unity中直接使用 JsonMapper.ToJson(对象),取到的字符串,里面汉字可能是\\u4E00类似这种其实也不用转,服务器会通过类似fastjson发序列化的方式,将json转对象,获取对象的值就是中文但是有时服务器要求将传参中字符串中类似\\u4E00这种转汉字,就需要下面 publ