面向对象基础知识整理

1、什么是对象? 什么是类?

对象是可以看的见摸得着的,对象可以是任何东西,比如水杯,书,手机等。准确的说,对象是一个自包含的实体,用一组可识别的特性和行为标识的。

类就是具有相同的属性和功能的对象的抽象集合。

实例,就是一个真实的对象。比如说‘人’这个对象,就是’人‘类的实例了。而实例化就是创建对象的过程,使用new关键字来创建的。

2、构造方法

构造方法,又叫构造函数,其实就是对类进行实例化。构造方法与类名同名,无返回值,也不需要void,在new时候调用。

3、方法重载

方法重载提供了创建同名的多个方法的能力,但这些方法需使用不同的参数类型。

方法重载时,两个方法必须要方法名相同,单参数类型或者个数必须要有所不同。

好处,在不改变原方法的基础上,新增功能(方法名相同)。

4、属性与修饰符

属性是一个方法或一对方法,但在调用他的代码看来,他是一个字段,即属性适合于以字段的方式使用方法调用的场合。

字段是存储类需要满足其设计所需要的数据,字段是与类相关的变量。

public表示它所修饰的类成员可以允许其他任何类来访问,俗称公有的。而private表示值允许同一个类中的成员访问,其他类包括它的子类无法访问,俗称私有的。

通常字段都是private,即私有变量,而属性都是public,即公有的变量。 

5、面向对象三大特性

封装:每个对象都包含它能进行操作所需要的所有信息,这个特性称为封装,因此对象不必依赖其他对象来完成自己的操作。

继承:对象的继承代表了一种‘is-a’的关系,如果两个对象A和B,可以描述为B是A,这表明B可以继承A。继承者还可以理解为是对被继承者的特殊化,因为除了具备被继承者的特性外,还具备自己独有的个性。继承定义了类如何相互关联,共享特性。继承的工作方式是,定义父类和子类,或叫做基类和派生类,其中子类继承父类的所有特性。子类不但继承了父类的所有特性,还可以定义的新的特性。

如果子类继承父类,第一 子类拥有父类非private的属性和功能;第二 子类具有自己的属性和功能,及子类可以扩展父类没有的功能和属性;第三 子类可以重写父类的方法。

protected表示继承时子类可以对基类有完全访问权。

继承是有缺点的,那就是父类变,子类也要跟着改变。继承显然是一种强耦合的关系。

多态:第一 子类以父类的身份出现 第二 子类在工作时以自己的工作方式实现 第三 子类以父类的身份出现时,子类特有的属性和方法不可以使用。

6、抽象类

抽象类需要注意几点,第一 抽象类不能被实例化。第二 抽象类的方法必须被子类重写,不然没有任何的存在意义。第三 如果类中包含抽象方法,那么类就必须定义为抽象类,不论是否还包含其他一般方法。

抽象类拥有尽可能多的共同代码,拥有尽可能少的数据。

因为抽象类是一个概念,它提供一个继承的出发点,当设计一个新的抽象类时,一定是用来继承的,所以,在一个以继承关系形成的顶级结构里面,树叶节点应当时具体类,而树枝节点均应当时抽象类。也就是说,具体类不是用来继承的。

7、接口

接口十八隐式公共方法和属性组合起来,以封装特定功能的一个集合。一旦类实现了接口,类就可以支持接口所制定的所有属性和成员。接口不允许提供任何成员的执行方式。

实现接口的类就必须要实现接口中的所有方法和属性。

抽象类可以给出一些成员的实现,接口却不包含成员的实现,抽象类的抽象成员可被之类部分实现,接口的成员需要实现类完全实现,一个类只能继承一个抽象类,但可实现多接口。

类是对对象的抽取,抽象类是对类的抽取,接口是对行为的抽象。

如果行为跨越不同类的对象,可以使用接口;对于一些相识的类对象,用继承抽象类。

从设计角度讲,抽象类是从子类中发现了公共的东西,泛化出父类,然后子类继承父类,而接口是根本不知子类的存在,方法如何实现还不确认,预先定义。

抽象类是自底而上抽象出来的,而接口则是自顶向下设计出来的。

 

转载于:https://www.cnblogs.com/zkjblogs/p/6582885.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/456205.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Binary Tree Level Order Traversal

Given a binary tree, return the level order traversal of its nodes values. (ie, from left to right, level by level). For example: Given binary tree {3,9,20,#,#,15,7}, 3/ \9 20/ \15 7return its level order traversal as: [[3],[9,20],[15,7] ] 解题思路:能够…

键盘事件相关

转自下面两个链接:http://www.cnblogs.com/starof/p/6558581.html http://www.cnblogs.com/cathsfz/archive/2011/05/29/2062382.html 在 JavaScript 中监听 IME 键盘输入事件 在 JavaScript 中监听用户的键盘输入是很容易的事情,但用户一旦使用了输入…

【R】语言第二课----- 变量的使用方法

num1<-c(9.1,8.2,7.3) num2<-1:10 char<-c(a,b,c) #单引号or双引号都可以 logit<-c(TRUE,FALSE,T,F) c(1,a,TRUE) sex<-c(F,M,F,M) sex sexf<-factor(sex) sexf num1[1]<-100 #索引一定要加方括号 num1[c(1,3)]<-c(99.9,77.7) num1[c(T,F,T)] num1[-2]…

Petuum - Careers

Petuum - CareersCloudformation

【R】语言第三课----矩阵

#矩阵 ?matrix m<-matrix(1:6,nrow 2,ncol3,dimnames list(c(r1,r2),c(c1,c2,c3))) m#默认按列排列 m<-matrix(1:6,nrow 2,ncol3,byrow T,dimnames list(c(r1,r2),c(c1,c2,c3)))m class(m) m[1,1] m[1,]# 相当于 m[c(T,F),] m[,1] m[r1,]m[1,] <- c(100,99,98…

谁说菜鸟不会数据分析--读书笔记

如果看不清可以下载下来&#xff0c;打开&#xff0c;放大。仅供参考。 转载于:https://www.cnblogs.com/sunshinewang/p/6591772.html

[MySQL 5.6优化] --order by limit x,x 优化

简介&#xff1a;order by limit x ,x 在实际工作中有各种业务需求要有order by的排序&#xff0c;有时候处理不好则会造成系统宕机&#xff01;原理&#xff1a;a.通过索引来获取排序b.通过内部算法获取排序&#xff1a; 案例具体SQL&#xff1a; SELECT c.order_price orderP…

【R】语言第四课----读取文件

install.packages("readxl") getwd() setwd("E:/作业4") library(readxl) tianmao<-read_excel(tianmaoTV.xlsx,skip1)#把第一行跳过&#xff0c;直接从第二行开始读取 #创建新变量 tianmao[total_sales]<-tianmao$current_price*tianmao$month_sale…

Html.Partial和Html. RenderPartial用法

Html.Partial和Html. RenderPartial用法Html.partial和RenderPartial的用法与区别Html.partial和RenderPartial都是输出html片段&#xff0c;区别在于Partial是将视图内容直接生成一个字符串并返回&#xff08;相当于有个转义的过程&#xff09;&#xff0c;RenderPartial方法是…

算术编码简单研究

算术编码 是一种无损数据压缩方法&#xff0c;也是一种熵编码的方法。和其它熵编码方法不同的地方在于&#xff0c;其他的熵编码方法通常是把输入的消息分割为符号&#xff0c;然后对每个符号进行编码&#xff0c;而算术编码是直接把整个输入的消息编码为一个数&#xff0c;一个…

Thinkphp5 还有这种操作?

2019独角兽企业重金招聘Python工程师标准>>> 在 _initialize 中取出 控制器名和方法名 define(CONTROLLER_NAME,Request::instance()->controller()); define(MODULE_NAME,Request::instance()->module()); define(ACTION_NAME,Request::instance()->actio…

【R】语言第五课----画图

?plot#高级绘图函数 可以完整地绘制出一张图 ?mtcars plot(mtcars$wt) plot(mtcars[,1:2]) plot(mtcars) plot(mtcars$wt,mtcars$disp) plot(mtcars$wt,mtcars$disp,typep) plot(mtcars$wt,mtcars$disp,typel) plot(mtcars$wt,mtcars$disp,typeb) plot(mtcars$wt,mtcars$disp…

Solidworks如何将参考平面的图形投影到某曲面上

1 画好草图&#xff0c;点击曲线-分割线 2 选择要投影的草图和被投影的面&#xff08;那个球面&#xff09;&#xff0c;最后效果如下图所示 3 为了获取连续的轨迹&#xff0c;我们可以再次选择这个草图&#xff0c;然后在投影面中选择平面&#xff0c;最后得到的图形如下图所示…

向极限挑战:算术编码 (转)

向极限挑战&#xff1a;算术编码 (转) http://blog.csdn.net/hhf383530895/archive/2009/08/24/4478605.aspx 我们在上一章中已经明白&#xff0c;Huffman 编码使用整数个二进制位对符号进行编码&#xff0c;这种方法在许多情况下无法得到最优的压缩 效果。假设某个字符的出…

np.random.seed(0)作用

在用python时时常会看到如下代码&#xff1a; import numpy as np np.random.seed(0) 其中np.random.seed(0)的作用是使得随机数据可预测&#xff0c;当我们设置相同的seed&#xff0c;每次生成的随机数相同。 如果不设置seed&#xff0c;则每次会生成不同的随机数&#xf…

发送邮件被退回,提示: Helo command rejected: Invalid name 错误

我自己配置的 postfix dovecot server&#xff0c; 配置了outlook 后&#xff0c; 相同的账号。 在有的电脑上能收发成功&#xff0c; 在有的电脑上发送邮件就出现退信。提示 Helo command rejected: Invalid name 错误。经过分析&#xff0c; 原来是计算机名的问题。 计算机名…

Series和DataFrame、相关性及NaN处理

pandas核心数据结构 pandas是以numpy为基础的&#xff0c;还提供了一些额外的方法 Series series用来表示一维数据结构&#xff0c;与python内部的数组类似&#xff0c;但多了一些额外的功能。 series内部由两个相互关联的数组组成&#xff1a;主数组用来存放数组&#xff…

Hive谓词解析过程分析

where col1 100 and abs(col2) > 0在Hive中的处理过程 where过滤条件称为谓词predicate。 以上where过滤条件在经过Hive的语法解析后&#xff0c;生成如下的语法树&#xff1a; TOK_WHERE AND TOK_TABLE_OR_C…

算术编码(Arithmetic Coding)源代码

Ian H. Witten、Radford M. Neal和John G. Cleary在1987年发表了一篇启发性的论文。论文中描述了一种基于整数运算的通用算术编码器&#xff0c;而且还给出了由计算错误导致的效率低下的分析。以下源代码来自于这篇论文&#xff1a;《基于算术编码的数据压缩》&#xff08;Arit…

pandas读写各种类型数据

read_X()通常是pandas模块下的&#xff0c;to_X()是dataframe的方法 CSV 读取 使用pandas.read_csv()方法&#xff0c;返回的是一个dataframe csv默认是以"&#xff0c;"分割的 csv文件内容 1、read_csv()默认以第一行数据作为标题 2、调用dataframe的head()方法…