面向对象知识点回顾(全)

.什么是类?
类是具有相同属性和方法的一组对象的集合,类是对象的抽象,而对象是类的实例。例如:人类分为学生类,教师类,学生类又能分成一个个具体有姓名,学号的学生。
类具有属性和方法,而类无法直接使用方法,需要创建一个实例对象,去给对象增加,给属性附加具体的值,并调用具体的方法
创建对象 类名 对象名=new 类名();
方法:普通方法,构造方法,和静态方法
普通方法:
访问修饰符(public、protect、private)返回值类型 方法名(有参/无参){
代码块;}
访问修饰符不同,调用方法的权限也就不同;public>protect>private
返回值void,代表返回值是空的,返回值不为空时,例如返回值要是String 就要再下面返回一个String类型 ,并且调用该方法的时候,也要用String 类型接收例如:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

方法之间的互相调用:
在这里插入图片描述
带参方法
1.当是带参方法时,即 punlic void 方法名(int/String/double xx){代码块}
调用的时候就要 对象名.方法名(输入int/String/double型)
当然参数列表可以放无限多个参数,调用的时候注意输入的类型,要与参数列表定义的顺序和数量一致
注意:返回值和定义参数不是一回事,当方法执行需要某个前提,前提是需要某个参数时,就要用含参的方法,当调用方法时,需要一个返回值才能继续下一步的时候,则需要返回值不为空。
2.基本数据类型和引用数据类型再传参的区别:
基本数据类型,如int,double等,只是把值复制了一份,给另一个变量,所以当另一个变量发生变化时,本身不会有改变,而引用数据类型,如数组,接口,自定义数据类型,如创建了一个对象,此时赋值时,将会把自身地址,也赋值过去,所以,当另一个变量发生变化时,本身也会发生变化。
3.创建对象数组:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
构造方法
结构: 访问修饰符 构造方法名–与类名相同(有参/无参){代码块;}
作用:初始化对象
注意:系统会默认提供给每个类无参构造方法,但是当同时写有带参的构造方法,则系统不会默认给无参构造方法,需要自己,重新写无参构造方法
在这里插入图片描述

代码如图:
在这里插入图片描述
在这里插入图片描述
(1)在这里插入图片描述
注意:this调用构造方法的时候,一定要写在方法的第一行
在这里插入图片描述
方法重载
1.定义:在同一个类中,方法名相同,参数个数或类型不同
构造方法重载:1.方法名相同 2.参数项不同 3.与返回值、修饰符无关
2.成员变量和局部变量的区别:
(1)作用域不同
局部变量的作用域仅限于定义它的方法
成员变量的作用域在整个类内部都是可见的
(2)初始值不同
Java会给成员变量一个初始值
Java不会给局部变量赋予初始值
注意:参数也是变量,是局部变量
在这里插入图片描述
封装
1.隐藏属性
private int health=100;
2.添加属性的setter/getter方法,并加入属性控制语句
在这里插入图片描述
在这里插入图片描述
封装的好处:
1.便于使用者正确使用系统,防止错误修改属性
2.有助于系统之间的松耦合,提高系统独立性
3.提高软件的可重用性
4. 降低了构建大型系统的风险

好处:1.允许类组成较小的单元(类似文件夹),易于找到和使用相应的文件
2.防止命名冲突,区分名字相同的类
3.有助于访问权限控制
规则:在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
访问权限
注意:在子类和父类在同一个包时,默认修饰符时则子类可以访问父类在这里插入图片描述
static
在这里插入图片描述
在这里插入图片描述
static变量的作用:
(1)能被类的所有实例共享,可作为
实例之间进行交流的共享数据
(2)如果类的所有实例都包含一个相
同的常量属性,可把这个属性定义为
静态常量类型,从而节省内存空间
static方法:

静态方法:可直接通过类名访问
静态方法中不能使用this和super
不能直接访问所属类的实例变量和实例方法
◆可直接访问类的静态变量和静态方法.
■实例方法 :通过实例访问
可直接访问所属类的静态变量、静态方法、实例变量和实例方法

静态方法必须被实现
main()就是最常用的静态方法
static代码块:
在这里插入图片描述
继承
使用继承:访问修饰符 class Pe{公共属性和方法}
编写子类,继承父类 访问修饰符 class Dog extends Pet{
子类特有的属性和方法}
继承是在Java中只支持单根继承,即一个类只能由一个直接父类。
■子类继承父类的什么 ?
继承public和protected修饰的属性和方法,不管子类和父类是否在同一个包里
继承默认权限修饰符修饰的属性和方法,但子类和父类必须在同一个包里
子类可以继承父类的所有资源嘛?
不能,如:private成员,子类与父类不在同一个包里,使用默认访问权限的成员,构造方法,但是子类可以调用父类的构造方法。
总结:
在这里插入图片描述
方法重写或方法的覆盖
1.子类根据需求对从父类继承的方法进行重新编写
2.重写时,可以用super.方法的方式来保留父类的方法
3.构造方法不能被重写
注意:两个类:有继承关系的父子类
方法重写的规则
super
super的使用:
在这里插入图片描述
注意,super调用的是父类非private的方法和属性
总结:
■super关键字来访问父类的成员
使用super关键字,super代表父类对象
◆super只能出现在子类的方法和构造方法中
◆super调用构造方法时,只能是第一句
super不能访问父类的private成员
super可以使被屏蔽的成员可见
this和super的区别:
在这里插入图片描述
注:Java只支持单根继承
一个类只能有一个直接父类,但是可以有多个间接父类
继承下的构造方法
■继承条件 下构造方法的调用规则
子类构造方法没有通过super显式调用父类的有参构造方法,也没通过this显式调用自身其他构造方法
➢系统默认调用父类的无参构造方法
子类构造方法通过super显式调用父类的有参构造方法
➢执行父类相应构造方法,而不执行父类无参构造方法
子类构造方法通过this显式调用自身的其他构造方法,在相应构造方法中应用以上两条规则
方法重写和深入

方法名相同
■参数列表相同
■返回值类型相同或者子类方法返回值类型可以是父类方法返回值类型的子类

在这里插入图片描述
在这里插入图片描述

■访问权限不能严于父类
■父类的静态方法不能被子类覆 盖为非静态方法,父类的非静态方
法不能被子类覆盖为静态方法

子类可以定义与父类同名的静态方法,以便在子类中隐藏父类的
静态方法(注:静态方法中无法使用super)
父类的私有方法不能被子类覆盖
不能抛出比父类方法更多的异常
Object类在Java中是所有类的直接或间接的父类
重写equals方法
在这里插入图片描述
多态:
定义:同一个引用类型,使用不同实例而执行不同操作
父类:
在这里插入图片描述
子类:
在这里插入图片描述
Master的方法:
在这里插入图片描述
创建对象:
在这里插入图片描述

抽象方法:
抽象方法没有方法体
抽象方法必须在抽象类里
抽象方法必须在子类中被实现,除非子类是抽象类

总结:
抽象方法
没有方法体

抽象类
有抽象方法的类一定是抽象类
抽象类不一定有抽象方法
抽象类不能被实例化
抽象方法必须在子类中被实现,除非子类是抽象类
在这里插入图片描述
在这里插入图片描述
多态的使用:
在这里插入图片描述

子类:在这里插入图片描述
向上转型:父类的引用指向子类对象,自动进行类型转换
在这里插入图片描述
向下转型
定义:将一个指向子类对象的父类引用赋给一个子类的引用,即父类类型强制转换为子类类型
如果想要调用子类特有的方法,则使用 向下转型
在这里插入图片描述
注意:在向下转型的过程中,如果没有转换成真实子类类型,会出现类型转换异常
方法:
使用instanceof时,对象的类型必须和instanceof后面的参数所指定的类在继承上有上下级关系
在这里插入图片描述
补充:多态的两种使用方式
在这里插入图片描述
以上是使用父类作为方法的形参
2.使用父类作为方法的返回值

在这里插入图片描述
在这里插入图片描述
第二个题目:■
需求说明
◆自定义类和方法,使用父类作为返回值实现打印不同类型商品价格
功能
➢父类:Goods(商品类)
➢子类:TVs(电视类)、Foods(食品类)
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
总结问题:
方法重写的规则是什么?
super的作用是什么?
继承下构造方法如何执行的?
Object类有哪些常被子类重写的方法?
如何实现多态?
多态有哪两种常用的应用方式?
抽象类
抽象类VS普通类
◆抽象类不能被实例化
➢但可以创建一个引用变量 ,其类型是一个抽象类 ,指向非抽象的子类实例
◆普通类可以被实例化
■抽象方法VS普通方法
有无方法体
注意:没有抽象构造方法,也没有抽象静态方法
抽象类中可以有非抽象的构造方法,创建子类的实例时可能调用

接口
概念性的定义:指系统对外提供的所有服务,关键字interface
访问修饰符 interface 接口名称 extends 其它接口名{
//声明变量
//声明方法
}
JDK8之前的接口特性:
■JDK8之 前必须知道的接口特性
◆接口中的变量都是静态常量( public static final ) , 必须显式初始化
接口中所有方法默认都是public abstract
接口没有构造方法,不可以被实例化,但可以被实现(常作为类型使用)
实现类必须实现接口的所有方法
实现类可以实现多个接口(Java中的多继承)
➢implements、多个接口使用逗号隔开
JDK8新增的接口特性:
.◆JDK1.8后,接口里可以有默认方法(方法体)了
➢default关键字 默认方法
➢默认方法可以被继承,通过实例调用
➢如果一个类实现了多个接口,多个接口都定义了多个同样的默认方法
-方案一:实现类需要覆盖重写接口中的默认方法不然会报错
-方案二:可以使用super来调用指定接C的默认方法
➢如果一个类继承了一个抽象类,实现了一一个接口,抽象类和接口存在相同的方法
-采取类优先的原则 ,优先继承抽象类的方法
➢接口默认方法可以有多个
抽象类和接口的异同:
■相同点
代表系统的抽象层
◆都不能被实例化
◆都能包含抽象方法
➢用于描述系统提供的服务,不必提供具体实现
■不同点
◆在抽象类中可以为部分普通方法提供默认实现, JDK8之前接口中只
能包含抽象方法, JDK8之后接口可包含默认方法
◆一个类只能继承一个直接的父类,但可以实现多个接口
使用原则:
使用原则
◆is a–抽象类; has a --接口
◆接口做系统与外界交互的窗口
➢接口提供服务
接口本身一-旦制定,就不允许随意修改
◆抽象类可完成部分功能实现,还有部分功能可作为系统的扩展点
◆抽象类便于复用,接口便于功能扩展和维护
异常
异常:
在程序的运行过程中所发生的不正常的事件,它会中断正在运行的
程序
异常处理:
◆根据不同的异常进行相应的处理,而不会就此中断程序运行
◆Java使用异常处理机制为程序提供了错误处理的能力

使用try-catch块捕获异常的三种情况:
1.没有异常在这里插入图片描述则catch中代码不会运行,其它代码块正常运行
2.发生异常在这里插入图片描述
.try中代码块不执行,1,4,5执行,2,3不执行
3.异常类型不匹配
在这里插入图片描述
只执行1,2,其它不执行,程序中断
在catch块中处理异常
在这里插入图片描述
printStackTrace():堆栈跟踪功能显示出程序运行到当前类的执行流程。
String getMessage:返回 i长信息描述字符串,是printStackTrace()输出信息的一部分
常见的异常类型:
在这里插入图片描述
try-catch-finally
只要在catch中不退出虚拟机,即,System.exit(1),finally块一定会执行
流程:
在这里插入图片描述
try-catch-finally结构中try语句块是必须的, catch、 finally语句块均可选,但两者至少出现之一。
多重块:
■引发多种类型的异常
排列catch语句的顺序:先子类后父类
发生异常时按顺序逐个匹配
只执行第一个与异常类型匹配的catch语句

如果在一个方法体中抛出了异常,如何通知调用者?
throws声明某个方法可能抛出的各种异常,多个异常用逗号隔开
方式1 :调用者处理异常
方式2 :调用者继续声明异常
如果调用者不处理,则java虚拟机会处理
➢main()方法声明的异常由Java虚拟机处理
throw
throw 抛出异常时,如果显式抛出,要么try-catch,要么throws声明,调用这个方法也同理
代码如图:
在这里插入图片描述
throws和throw的区别:
在这里插入图片描述
异常体系结构:
在这里插入图片描述
自定义异常:
先创建一个异常类,继承Exception,再由特定异常信息构建异常对象
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
异常处理的原则:
异常处理与性能
异常只能用于非正常情况
需要对捕获的异常做处理
不要将过于庞大的代码块放在try中
在catch中指定具体的异常类型

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值