08 面向对象 02-- 封装、继承、抽象类 v1.1

本贴最后更新于 2719 天前,其中的信息可能已经时移世异

1.从现实中抽象出类分三步:

找出它的种类----确定物种

根据“对象”抽象出“类”

找出它的属性----确定物种的特征特点

属性通常是名词表示

找出它的行为(剔除无关的属性和方法)----确定物种的行为、作用、功能等。

方法通常是动词表示

2.使用类图描述类

用于分析和设计“类”

直观、容易理解

3.构造方法:

系统提供默认无参构造方法

自定义构造方法时,系统不再提供默认无参构造方法。若仍然需要无参的构造函数,可以自己写出来,或者借助工具生成!

4.方法重载:

A.方法名相同;

B.参数列表不相同;-----不相同可以是参数数量、顺序、数据类型的不同

C.与返回值、访问修饰符无关

方法重载,说明同名的方法允许有多个,而且都在同一个类中。

常见的重载:

类的构造函数重载、System.out.println().

5.static 关键字

通常情况下,我们访问属性和方法都是通过对象来调用的,可不可以不通过对象来调用呢?可以的,使用 static 关键修饰属性或者方法,这样就可以通过类名来直接调用:

|
| static、非 private 修饰 | 非 static、private 修饰 |
| 属性 | 类属性、类变量 | 实例属性、实例变量 |
| 方法 | 类方法 | 实例方法 |
| 调用方式 | 类名.属性
类名.方法()
对象.属性
对象.方法() | 对象.属性
对象.方法() |
| 归属 | 类 | 单个对象 |

static 还可以修饰代码块,变成静态代码块!

static 还可以和 import 连用,实现静态导入

例如:import static java.lang.System.out; //静态导入 System.out

在方法里不可以定义 static 变量,若定义,Eclipse 会报错!

6.面向对象三大特征:封装、继承、多态。

封装性----每个人都有自己的隐私,不该你看的不要看。

继承性----子承父业,继承父亲的特征与技能

多态性----子孙不满足现状(重写父类的方法),或者偷学了其他技能。

7.封装:

为什么要使用封装?属性随意访问,不合理的赋值

封装:将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问。

封装的好处:

A.只能通过规定的方法访问数据;

B.隐藏类的实现细节;

C.方便修改实现;

D.方便加入控制语句;

如何封装或者说封装的步骤:

A.修改属性的可见性;----在成员属性前面增加 private 的访问权限修饰符

B.创建 public 修饰的成员属性的 getter 和 setter 方法;----用于外部对成员属性的读写。

C.在 getter 和 setter 方法中加入属性控制语句。----对属性值的合法性进行检查

为成员属性添加 getter/setter 方法方式有以下几种:

A.手写 getter/setter 方法;

B.Eclipse 中添加 getter/setter 方法的快捷键:Shift+Alt+S+R

C.光标置于类中,菜单栏 Source---Generate Getters and Setters...

D.使用 lombok 的注解自动帮我们生成。

8.this 关键字:表示当前对象

A.调用属性:this.属性名;或者 this.属性名=值;

B.调用方法:this.方法名(); 或者 this.方法名(参数列表);

C.调用构造函数:

this(); //如果使用,必须是构造方法中的第一条语句,否则 Eclipse 报错!

this(参数列表);

9.继承:

多个相关的类有相同的属性和方法,可以将相同的部分提取出来放到另一个新类中,这个新类作为相关类的父类。

使用继承的优点:

A.减少重复的代码,不抽取父类,每个类均有相同字段,类越多重复就越多;

B.方便代码修改,只要修改一个父类,所有子类同步修改;

C.子类继承父类允许的属性和方法。

D.是代码复用的一种方式。

子类与父类是 is-a 关系。

Java 中继承是单继承的,只能继承一个父类。

继承使用的关键字:extends

如果定义一个类的类名后面跟上 extends 关键字,再加上另一个类名,则表明继承后面的那个类。例如:

class Dog extends Pet {

    //子类特有的属性和方法

}

何时使用继承?符合 is-a 关系的设计使用继承

只要说“猫是哺乳动物”,猫的很多属性、行为就不言自明了

10.super 关键字:表示父类对象,和 this 类似

A.调用属性:super.属性名;或者 super.属性名=值;

B.调用方法:super.方法名(); 或者 super.方法名(参数列表);

C.调用构造函数:在子类构造方法中调用且必须是第一句

super();

super(参数列表);

注意:super 关键字来访问父类的成员

super 只能出现在子类的方法和构造方法中

super 调用构造方法时,只能是第一句

super 不能访问父类的 private 成员

11.不能被继承的父类成员:

A.private 成员;

B.子类与父类不在同包,使用默认访问权限的成员

C.构造方法

12.访问修饰符 protected

可以修饰属性和方法,本类、同包、子类可以访问.

| 访问修饰符 | 本类 | 同包 | 子类 | 其他 |
| private | √ |
|
|
|
| 默认(default) | √ | √ |
|
|
| protected | √ | √ | √ |
|
| public | √ | √ | √ | √ |

13.多重继承关系的初始化顺序是怎样的?

14.方法重写: @Override 可以检查重写的方法名是否正确

父类的方法一般更具有通用性,如果子类想有自己的特点使用父类的方法就很难做到,但是使用方法重写就可以满足要求。

方法重写,在子类中重新实现父类的方法以满足子类的要求。

父类的构造方法也会被重写吗?不能被继承,因此不能重写。

方法重写的规则:

方法名相同

参数列表相同

返回值类型相同或者是其子类;

访问权限不能严于父类。

方法重载与方法重写比较:

|
| 位置 | 方法名 | 参数表 | 返回值 | 访问修饰符 |
| 方法重写 | 子类/接口实现类 | 相同 | 相同 | 相同或是其子类 | 不能比父类更严格 |
| 方法重载 | 同类 | 相同 | 不相同 | 无关 | 无关 |

方法重写通常在子类或者接口的实现类中。

15.抽象类:

有时候,我们想限制一个类的实例化(不允许通过 new 来实例化),在 Java 中怎么办?

Java 中可以将其定义为抽象类,限制实例化,使用的关键字是 abstract。例如:

public abstract class Pet {

}

abstract 也可用于方法——抽象方法

抽象方法没有方法体

抽象方法必须在抽象类里

抽象方法必须在子类中被实现,除非子类是抽象类

抽象类和抽象方法

抽象类不能被实例化;

可以有 0~多个抽象方法;

有抽象方法的类一定是抽象类。

16.final 关键字: 最终的,最终版的

A.类不希望再被其他类继承? 使用 final 类

final 修饰的类,变成太监类,我们常见的 String 类就是 final 修饰的类

B.方法不希望被重写? 使用 final 方法

final 修饰的方法,不可以被子类重写。

C.属性值不希望被修改? 使用常量,变成常量后注意大写规范!

final 修饰的成员属性,变成成员常量;

final 修饰的变量,则变成常量。

只能在初始化时进行赋值

注意:

A.使用 final 修饰引用型变量,变量不可以再指向另外的对象.

即不可以再 new 一个对象来赋值!

B.使用 final 修饰引用型变量,变量的值(或说地址引用)是固定不变的,

而变量所指向的对象的属性值是可变的。

17.学习方式:

A.搜索;

B.看懂;

C.验证---把代码执行一遍;

D.应用到自己要写的功能中!

其他知识:

A.Eclipse 中使用 Git 插件推拉代码;

B.使用 Lombok 自动生成 getter 和 setter 方法;------减少我们通用的代码量。

B1.先下载 lombok.jar,下载地址:https://projectlombok.org/

B2.双击运行 lombok.jar 安装到 Eclipse 中;//IDEA 中安装 lombok 插件

B3.安装后重新打开 Eclipse!

B4.把 jar 包加载进项目中

Java 项目将 lombok 的 jar 包添加到项目的 BuildPath 中;

Web 项目将 jar 包添加到项目的 lib 目录中

B5.使用 lombok 的注解即可。在我们要使用的类上,或者属性上直接使用:----@Data @Getter @Setter

C.在命令行执行 jar 包的方法:例如:

java -jar lombok.jar

D.Eclipse 中在源文件中,可以通过点.列出类或者对象的所有可见的属性。

练习题:

A.用 Java 做一个计算器;

  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3190 引用 • 8214 回帖 • 1 关注
  • 开发
    38 引用 • 159 回帖 • 2 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...

推荐标签 标签

  • 智能合约

    智能合约(Smart contract)是一种旨在以信息化方式传播、验证或执行合同的计算机协议。智能合约允许在没有第三方的情况下进行可信交易,这些交易可追踪且不可逆转。智能合约概念于 1994 年由 Nick Szabo 首次提出。

    1 引用 • 11 回帖 • 2 关注
  • SpaceVim

    SpaceVim 是一个社区驱动的模块化 vim/neovim 配置集合,以模块的方式组织管理插件以
    及相关配置,为不同的语言开发量身定制了相关的开发模块,该模块提供代码自动补全,
    语法检查、格式化、调试、REPL 等特性。用户仅需载入相关语言的模块即可得到一个开箱
    即用的 Vim-IDE。

    3 引用 • 31 回帖 • 104 关注
  • 京东

    京东是中国最大的自营式电商企业,2015 年第一季度在中国自营式 B2C 电商市场的占有率为 56.3%。2014 年 5 月,京东在美国纳斯达克证券交易所正式挂牌上市(股票代码:JD),是中国第一个成功赴美上市的大型综合型电商平台,与腾讯、百度等中国互联网巨头共同跻身全球前十大互联网公司排行榜。

    14 引用 • 102 回帖 • 354 关注
  • 大数据

    大数据(big data)是指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合,是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产。

    93 引用 • 113 回帖
  • 博客

    记录并分享人生的经历。

    273 引用 • 2388 回帖
  • 房星科技

    房星网,我们不和没有钱的程序员谈理想,我们要让程序员又有理想又有钱。我们有雄厚的房地产行业线下资源,遍布昆明全城的 100 家门店、四千地产经纪人是我们坚实的后盾。

    6 引用 • 141 回帖 • 584 关注
  • WebComponents

    Web Components 是 W3C 定义的标准,它给了前端开发者扩展浏览器标签的能力,可以方便地定制可复用组件,更好的进行模块化开发,解放了前端开发者的生产力。

    1 引用 • 5 关注
  • Jenkins

    Jenkins 是一套开源的持续集成工具。它提供了非常丰富的插件,让构建、部署、自动化集成项目变得简单易用。

    53 引用 • 37 回帖 • 3 关注
  • Ant-Design

    Ant Design 是服务于企业级产品的设计体系,基于确定和自然的设计价值观上的模块化解决方案,让设计者和开发者专注于更好的用户体验。

    17 引用 • 23 回帖 • 4 关注
  • 以太坊

    以太坊(Ethereum)并不是一个机构,而是一款能够在区块链上实现智能合约、开源的底层系统。以太坊是一个平台和一种编程语言 Solidity,使开发人员能够建立和发布下一代去中心化应用。 以太坊可以用来编程、分散、担保和交易任何事物:投票、域名、金融交易所、众筹、公司管理、合同和知识产权等等。

    34 引用 • 367 回帖
  • danl
    146 关注
  • 钉钉

    钉钉,专为中国企业打造的免费沟通协同多端平台, 阿里巴巴出品。

    15 引用 • 67 回帖 • 335 关注
  • App

    App(应用程序,Application 的缩写)一般指手机软件。

    91 引用 • 384 回帖 • 2 关注
  • uTools

    uTools 是一个极简、插件化、跨平台的现代桌面软件。通过自由选配丰富的插件,打造你得心应手的工具集合。

    6 引用 • 14 回帖
  • Chrome

    Chrome 又称 Google 浏览器,是一个由谷歌公司开发的网页浏览器。该浏览器是基于其他开源软件所编写,包括 WebKit,目标是提升稳定性、速度和安全性,并创造出简单且有效率的使用者界面。

    62 引用 • 289 回帖
  • Solo

    Solo 是一款小而美的开源博客系统,专为程序员设计。Solo 有着非常活跃的社区,可将文章作为帖子推送到社区,来自社区的回帖将作为博客评论进行联动(具体细节请浏览 B3log 构思 - 分布式社区网络)。

    这是一种全新的网络社区体验,让热爱记录和分享的你不再感到孤单!

    1435 引用 • 10056 回帖 • 489 关注
  • 设计模式

    设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。

    200 引用 • 120 回帖
  • 单点登录

    单点登录(Single Sign On)是目前比较流行的企业业务整合的解决方案之一。SSO 的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。

    9 引用 • 25 回帖
  • 域名

    域名(Domain Name),简称域名、网域,是由一串用点分隔的名字组成的 Internet 上某一台计算机或计算机组的名称,用于在数据传输时标识计算机的电子方位(有时也指地理位置)。

    43 引用 • 208 回帖
  • JVM

    JVM(Java Virtual Machine)Java 虚拟机是一个微型操作系统,有自己的硬件构架体系,还有相应的指令系统。能够识别 Java 独特的 .class 文件(字节码),能够将这些文件中的信息读取出来,使得 Java 程序只需要生成 Java 虚拟机上的字节码后就能在不同操作系统平台上进行运行。

    180 引用 • 120 回帖 • 2 关注
  • Sym

    Sym 是一款用 Java 实现的现代化社区(论坛/BBS/社交网络/博客)系统平台。

    下一代的社区系统,为未来而构建

    524 引用 • 4601 回帖 • 700 关注
  • 外包

    有空闲时间是接外包好呢还是学习好呢?

    26 引用 • 232 回帖
  • 大疆创新

    深圳市大疆创新科技有限公司(DJI-Innovations,简称 DJI),成立于 2006 年,是全球领先的无人飞行器控制系统及无人机解决方案的研发和生产商,客户遍布全球 100 多个国家。通过持续的创新,大疆致力于为无人机工业、行业用户以及专业航拍应用提供性能最强、体验最佳的革命性智能飞控产品和解决方案。

    2 引用 • 14 回帖 • 2 关注
  • 正则表达式

    正则表达式(Regular Expression)使用单个字符串来描述、匹配一系列遵循某个句法规则的字符串。

    31 引用 • 94 回帖 • 2 关注
  • HBase

    HBase 是一个分布式的、面向列的开源数据库,该技术来源于 Fay Chang 所撰写的 Google 论文 “Bigtable:一个结构化数据的分布式存储系统”。就像 Bigtable 利用了 Google 文件系统所提供的分布式数据存储一样,HBase 在 Hadoop 之上提供了类似于 Bigtable 的能力。

    17 引用 • 6 回帖 • 75 关注
  • Webswing

    Webswing 是一个能将任何 Swing 应用通过纯 HTML5 运行在浏览器中的 Web 服务器,详细介绍请看 将 Java Swing 应用变成 Web 应用

    1 引用 • 15 回帖 • 637 关注
  • 阿里云

    阿里云是阿里巴巴集团旗下公司,是全球领先的云计算及人工智能科技公司。提供云服务器、云数据库、云安全等云计算服务,以及大数据、人工智能服务、精准定制基于场景的行业解决方案。

    89 引用 • 345 回帖