Java — 面向对象
一、类和对象
简介:类是对事物的一种描述,对象则为具体存在的事物。
类的定义:
public class 类名 {
// 成员变量
访问修饰符 数据类型 变量名;
…
// 成员方法
访问修饰符 返回类型 方法名(参数列表) {
若干语句;
return 方法返回值;
}
...
}
创建对象:类名 对象名 = new 类名();
成员调用:对象名.成员变量;,对象名.成员方法(参数列表);
二、方法
定义:访问修饰符 返回值类型 方法名(参数列表) { 方法逻辑; return 方法返回值 } 。
调用:方法名(参数列表);
分类:无参数无返回值、无参数有返回值、有参数无返回值、有参数有返回值。
传值:
- 基本类型:调用方值的复制,双方各自的后续修改互不影响。方法内部对参数变量做的任何操作都不会影响方法外部的变量。
- 引用类型:调用方的变量和接收方的参数变量,内存地址指向同一个对象。双方任意一方修改该参数值都会影响对方。
- 可变参数:当方法的参数列表有两个或多个参数时,可变参数需放在末尾。
进阶:
- 类作为形参和返回值:方法的形参是类,需要该类的对象。方法的返回值是类,返回该类的对象;
- 抽象类作为形参和返回值:方法的形参是抽象类,需要该抽象类子类对象。方法的返回值是抽象类,返回该抽象类的子类对象;
- 接口作为形参和返回值:方法的形参是接口,需要该接口的实现类对象。方法的返回值是接口名,返回该类的实现类对象。
三、封装
简介:封装是面向对象编程语言对客观世界的模拟,客观世界里成员变量都隐藏在对象内部,外界无法直接操作。
原则:将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问。
实现:
- 使用 private 访问修饰符将对象的属性私有化;
- 创建公开的 get / set 方法用于对属性的读写;
- 在 get / set 方法中对属性的合法性进行判断。
private 关键字:
- 是一个可以修饰成员信息的权限修饰符;
- 被其修饰的成员只能在本类中访问,不能被其它类使用;
- 被其修饰的成员提供公共的 get / set 方法,供其它类使用。
this 关键字:
- 指向当前对象的引用(谁调用我就代表谁);
- 通过
this.成员变量 | 成员方法(参数列表) | (参数列表)来访问本类的成员变量、方法,构造方法; - 使用时必须在方法体第一行,不能在静态方法中使用。
构造方法:
- 是一种特殊的方法,用于创建对象并完成对象的初始化;
- 格式为
public class 类名 { 修饰符 类名(参数列表) }; - 没有自定义构造方法,系统会提供一个默认的无参构造方法,若自定义了构造方法,系统不再提供默认的无参构造方法。
四、继承
由来:多个类中存在相同属性和行为时,将这些相同内容抽取到一个公共类中,则其它类中无需再定义这些属性和行为,只需继承公共类即可。
定义:就是子类继承父类的属性和行为,使得子类对象具有与父类对象相同的属性和行为,且子类可直接访问父类的非私有属性和行为。
格式:public class 子类名 extends 父类名 {...} 。
好处:提高代码的复用性,类与类之间产生了关系,是多态的前提。
特点:只支持单继承,不支持多继承,但支持多层继承。
方法重写:
- 子类必须有和父类相同的方法名、参数列表和返回类型,且该父类方法没有被 final 或 static 修饰;
- 子类的重写方法其访问修饰符的限定范围应大于等于父类方法,即 public > protected > default ;
- 子类不能重写父类构造方法,只能通过 super(参数列表) 调用。
访问修饰符:
- public(公共的):同类、同包、不同包的子类、不同包的非子类,均可访问;
- protected(受保护的):同类、同包、不同包的子类,均可访问;
- default(默认的):同类、同包,均可访问;
- private(私有的):同类,才可访问。
super 关键字:
- 代表父类存储空间的标识,可理解为父类对象引用;
- 子类通过
super.成员变量 | 成员方法(参数列表) | (参数列表)来访问父类的成员变量、方法,构造方法; - 使用时必须在方法体第一行。
super 和 this 的区别:
- 父类空间优先于子类对象产生,在每次创建子类对象时,先初始化父类空间再创建其子类对象本身。
目的在于子类对象中包含了其对应的父类空间便可包含其父类成员。 super.成员变量 | 成员方法(参数列表) | (参数列表)访问的是父类的成员变量、方法,构造方法;this.成员变量 | 成员方法(参数列表) | (参数列表)访问的是本类的成员变量、方法,构造方法;- super 和 this 不能同时使用,只能存在一个,并且都在方法体第一行。
成员访问特点:
- 变量:子类局部范围找 > 子类成员范围找 > 父类成员范围找 > 若都没有则报错、不考虑父类的父类。
- 方法:子类成员范围找 > 父类成员范围找 > 若都没有则报错、不考虑父类的父类。
五、多态
简介:同一对象在不同时刻表现出不同的形态。
特点:相同的消息给予不同的对象会引发不同的动态,也就是允许不同类的对象对同一消息做出不同的响应。
实现:满足继承(实现)关系、要有方法重写、父类引用指向子类对象。
访问:成员变量(编译看左边,执行看左边),成员方法(编译看左边,执行看右边)。
好处:定义方法时,使用父类型作为参数,将来调用时使用具体的子类型参与操作。
弊端:不能使用子类的特有方法。
转型:
- 向上转型:又称自动转型、隐式转型,从子到父,子类对象赋值给父类对象,就是说父类引用指向子类实例;
格式:父类名 对象名 = new 子类名();,此时该对象不能调用子类的特有方法。 - 向下转型:又称强制转型,从父到子,父类对象赋值给子类对象,就是说子类引用指向父类实例;
格式:子类名 对象名 = (子类名) 父类实例;,此时该对象可以调用子类的特有方法,解决了多态的弊端。 - instanceof:返回一个布尔值来确认某个对象,是否是某个特定类或该特定类子类的一个实例,就是说左边的对象是不是右边类的实例;
格式:对象名 instanceof 类型,类型可以为类或接口。
六、final
简介:final 关键字是最终的意思,可以修饰类、成员方法、成员变量。
修饰类:
- 被 final 修饰的类叫做最终类,不能被其它类继承;
- 类中的所有方法都被隐式设置为 final ,但类中成员变量可以被定义为 final 或非 final ;
- 格式:
public final class 类名 {...}。
修饰方法:
- 被 final 修饰的方法叫做最终方法,不能被子类重写;
- 格式:
访问修饰符 final 返回值类型 方法名(参数列表) {...}。
修饰变量:
- 被 final 修饰的变量叫做常量,名称大写;
- 成员变量具有默认值,被 final 修饰之后不再有默认值,需手动赋值;
- 局部变量一次赋值终生不变;
- 格式:
访问修饰符 final 数据类型 变量名(大写) = 手动赋值。
七、static
简介:static 关键字是静态的意思,访问修饰成员方法、成员变量。
修饰方法:
- 被 static 修饰的方法叫做静态方法,也称为类方法,可通过
类名.方法名直接调用; - 静态成员方法只能访问静态的成员变量和方法;
- 非静态成员方法可以访问非静态的成员变量和方法,也可以访问静态成员变量和方法。
修饰变量:
- 静态变量:被 static 修饰的成员变量叫做静态变量,也称为类变量,静态变量属于这个类,而不是属于这个类的对象;
静态变量通过类名.变量名直接调用。 - 实例变量:没被 static 修饰的成员变量叫做实例变量,实例变量属于这个类的实例对象;
实例变量必须先 new 一个对象之后,通过对象名.变量名调用。
八、抽象类
简介:在做子类共同功能抽取时,有些方法在父类中并没有具体的体现,此时就需要抽象类。
格式:public abstract class 类名 {...} 。
特点:
- 抽象类和抽象方法必须使用 abstract 关键字修饰;
- 抽象类中不一定有抽象方法,但有抽象方法的类一定是抽象类;
- 抽象方法不能实例化,要想实例化可参照多态的方式,通过子类对象实例化,这叫做抽象类多态;
- 抽象类的子类,要么重写抽象类中的所有抽象方法,要么子类也是抽象类。
内部:
- 成员变量:既可以是变量也可以是常量;
- 成员方法:既可以是普通方法也可以是抽象方法;
- 构造方法:无参有参构造方法。
注意:
- 与 abstract 不能共存的关键字:final 、private 、static ;
- final:被 final 修饰的类不能有子类,而被 abstract 修饰的类一定是个父类;
- private:抽象类中私有的抽象方法,不被子类所知就无法重写,而抽象方法必须被重写。
- static:若 static 可以修饰抽象方法,则不用 new 对象,直接类名调用即可,此时抽象方法没有意义。
九、接口
简介:接口就是一种公共的规范标准,只要符合规范标准,大家都可以通用。Java 中的接口更多的体现在对行为的抽象。
格式:public interface 接口名 {...} 。
特点:
- 接口用 interface 关键字修饰;
- 类实现接口用 implements 表示,例:
public class 类名 implements 接口名 {...}; - 接口不能实例化,要想实例化可参照多态的方式,通过子类对象实例化,这叫做接口多态;
- 接口的子类要么重写接口中所有抽象方法,要么子类也是抽象类。
内部:
- 成员变量:只能是常量,默认修饰符:public static final ;
- 成员方法:只能是抽象方法,默认修饰符:public abstract ;
- 构造方法:没有,接口主要是扩展功能而没有具体存在的。
抽象类与接口的区别:
- 成员区别:抽象类有变量、常量、构造方法、普通方法、抽象方法,接口只有常量、抽象方法。
- 关系区别:
- 类与类的关系:继承关系,只能单继承,支持多层继承;
- 类与接口的关系:实现关系,可以单实现,也支持多实现,还可以继承一个类的同时实现多个接口;
- 接口与接口的关系:继承关系,可以单继承,也支持多继承。
- 设计理念:
- 抽象类:对类抽象,包括属性和行为;
- 接口:对行为抽象,主要对行为。
新特性:JDK8 之前,接口只有常量以及抽象方法。JDK8 时,接口增加了默认方法和静态方法。JDK9 时,接口增加了私有方法。
默认方法:
- 格式:
default 返回值类型 方法名(参数列表) {...}; - 注意:默认方法不是抽象方法,也可以重写,重写时去掉 default 关键字;
- 作用:对接口的升级不会影响到现有代码。
静态方法:
- 格式:
static 返回值类型 方法名(参数列表) {...}; - 注意:静态方法只能通过接口名调用,不能通过实现类名或对象名调用。
私有方法:
- 格式1:
private 返回值类型 方法名(参数列表) {...}; - 格式2:
private static 返回值类型 方法名(参数列表) {...}; - 注意:默认方法可以调用私有的静态方法和非静态方法,静态方法只能调用私有的静态方法;
- 作用:提取默认方法和静态方法中相同的代码,提高代码的复用性。
十、内部类
简介:就是在一个类中定义一个类,例:在类 A 的内部定义类 B,类 B 就是内部类。
格式:public class 类名 { 访问修饰符 class 类名 } 。
特点:内部类可以直接访问外部类的成员(包括私有),外部类要访问内部类的成员必须创建对象。
分类:
- 成员内部类:在类的成员位置,外界访问通过
外部类名.内部类名 对象名 = new 外部类名().new 内部类名();;
但一般都是私有化的,不会让外界直接访问,而是通过在外部类中定义一个方法,在该方法中实例化内部类,调用内部类方法;
最终外界通过外部类的这个方法达到访问内部类的效果。 - 局部内部类:在类的方法体中,外界无法直接访问,需在方法体中创建对象并使用,最终外界通过该方法达到访问局部内部类的效果;
- 匿名内部类:局部内部类的简写形式,前提是继承类或实现接口,格式:
new 类名() | 接口名() { 重写方法 };
本质上是一个继承了该类或实现了该接口的子类匿名对象,就是说该类没有声名对象名。
Java — 面向对象的更多相关文章
- JAVA面向对象
JAVA面向对象 对象 我们生活中能看到能摸到的一切事物都是对象.在程序中模拟出生活中的所有东西万物皆对象 只要是对象--属性和行为(方法) 属性 对象有什么 例如:学生有姓名.学 ...
- 理解JAVA - 面向对象(object) - 属性,方法
理解JAVA - 面向对象(object) - 属性,方法 多态的体现: 向上造型,父类接收子类对象:向上造型: 从父类角度看不到子类独有的方法:面向对象,人类认知世界的方式:生活中每天都 ...
- Java面向对象㈠ -- 封装
Java的面向对象有三大特征:封装.继承.多态.这里主要对封装进行讲解. 封装可以理解为隐藏一个类的成员变量和成员函数,只对外提供需要提供的成员函数. Java的封装主要通过访问权限控制符:priva ...
- 谈谈Java面向对象的三大特性
Java面向对象的三大特性就是指封装.继承.多态了. 一.封装: 概念:封装是指隐藏对象的属性和实现细节,仅对外提供公共访问方式. (举例:笔记本电脑就是一个封装体,Java语言中最小的封装体就是函数 ...
- Java面向对象:接口
Java面向对象之接口 什么是接口:接口是一种规范和标准,他们可以约束类的行为,是一些方法特征的集合 语法: [修饰符] interface 接口名 extends 父接口1,夫接口2....... ...
- 实验二 Java面向对象程序设计
实验二 Java面向对象程序设计 实验内容 1. 初步掌握单元测试和TDD 2. 理解并掌握面向对象三要素:封装.继承.多态 3. 初步掌握UML建模 4. 熟悉S.O.L.I.D原则 5. 了解设计 ...
- java基础1.0::Java面向对象、面向对象封装、抽象类、接口、static、final
一.前言 一直以来都是拿来主义,向大神学习,从网上找资料,现在就把自己在工作中和学习中的所理解的知识点写出来,好记星不如烂笔头,一来可以作为笔记自己温习,二来也可以给走在求学之路的同学们一点参考意见, ...
- 20145212《Java程序设计》实验报告二 《 Java面向对象程序设计》
20145212 实验二< Java面向对象程序设计> 实验内容 单元测试 三种代码 伪代码 百分制转五分制: 如果成绩小于60,转成"不及格" 如果成绩在60与70之 ...
- 20145213《Java程序设计》实验二Java面向对象程序设计实验报告
20145213<Java程序设计>实验二Java面向对象程序设计实验报告 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装,继承,多态 初步掌握UML建模 熟悉S.O. ...
- 20145206《Java程序设计》实验二Java面向对象程序设计实验报告
20145206<Java程序设计>实验二Java面向对象程序设计实验报告 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O. ...
随机推荐
- linux-安装zookeeper及相关操作
下载两个安装包并解压: 配置jdk环境变量: [root@VM-0-10-centos zookeeper]# cat /root/.bash_profile # .bash_profile # Ge ...
- MariaDB CTE公用表达式
公用表达式(Common Table Expressions,简称CTE) Maria DB 版本为10.2.2以上的才支持 WITH 语法 CTE 介绍 WITH关键字表示公用表表达式(CTE) 它 ...
- 什么是JDK?什么是JRE?说说它们之间的区别?
JDK (Java Development Kit) JDK是整个Java的核心,包括了Java运行环境JRE(Java Runtime Envirnment),一堆Java工具(javac,ja ...
- 你对 Spring Boot 有什么了解?
事实上,随着新功能的增加,弹簧变得越来越复杂.如果必须启动新的 spring 项 目,则必须添加构建路径或添加 maven 依赖项,配置应用程序服务器,添加 spring 配置.所以一切都必须从头开始 ...
- 学习Kvm(五)
KVM(一)搭建部署与概述 一,KVM概述 1.1 虚拟化概述 在计算机技术中,虚拟化意味着创建设备或资源的虚拟版本,如服务器,存储设备,网络或者操作系统等等 [x] 虚拟化技术分类: 系统虚拟化(我 ...
- CPU架构:CPU架构详细介绍
1 概述 CPU架构是CPU商给CPU产品定的一个规范,主要目的是为了区分不同类型的CPU.目前市场上的CPU分类主要分有两大阵营,一个是intel.AMD为首的复杂指令集CPU,另一个是以IBM.A ...
- 03. Pandas数据结构
03. Pandas数据结构 Series DataFrame 从DataFrame中查询出Series 1. Series Series是一种类似于一维数组的对象,它由一组数据(不同数据类型)以及一 ...
- c++思维导图
转自:https://blog.csdn.net/qq_37941471/article/details/84026920
- 一个html标签到底包含了多少信息(1)
先来看一段代码: var dom = document.querySelector('body'); for(var i in dom){ console.log(i,dom[i]) } 可以看到很多 ...
- 用纯CSS美化radio和checkbox
Radio和checkbox需要美化吗?答案是必须的,因为设计风格一直都会变化,原生的样式百年不变肯定满足不了需求. 先看看纯CSS美化过后的radio和checkbox效果:查看. 项目地址:mag ...