面向对象的三个基本特征
终于到了这个激动的时刻,再次写下一篇意
味深长的博文,其中心酸唯有自己懂得。
说到面向对象,大家还有不清楚的吗?我在这里简单说一下,面向对象就是世间万物皆可为对象,那么你面对它,就是面向一个对象。
说到面向对象
首先说继承
概念:
继承是面向对象三大特征之一。可以使得子类具有父类的属性和方法,还可以在子类中重新定义,追加属性和方法。
格式:
格式: public class 子类名 extends 父类名{}
父类:
父类:又称基类/超类
子类
又称派生类
继承中子类有什么特点呢?
1 子类可以有父类的内容
2 子类还可以有自己特有的内容
继承中访问成员变量的特点
在子类的方法中访问一个变量,首先在子类局部范围找–>子类成员范围找–>父类成员范围找–>如果都没有找到就报错(不考虑父亲的父亲)
super关键字
super关键字的用法和this关键子的用法相
似 。this: 代表本类对象的引用。super: 代表父类存储空间的标识( 可以理解为父类对象引用)
继承中构造方法的访问特点
子类中所有的构造方法默认都会访问父类中的无参的构造方法, 这是为什么呢? 因为子类会继承父类中的数据,可能还会使用父类的数据。所以,子类初始化之前,一定要先完成父类数据的初始化。
推荐: 自己给出无参构造方法
继承中成员方法的访问特点
子类成员范围找–>父类成员范围找–>如果都没有找到就报错(不考虑父亲的父亲)
有继承那么就有方法的重写
概述:子类中出现了和父类一摸一样的方法声明
应用: 当子类需要父类的功能,而功能主体子类有自己特有内容时,可以重写父类中的方法,这样,既沿袭了父类中的功能,有定义了子类特有的内容
Override
其中Override是一个注解,它可以帮我们检查重写方法的方法声明的正确性
方法重写的注意!!
私有方法不能被重写(父类私有成员,子类是不能继承的)
子类方法访问权限不能比父类低(public>默认>private)
java中只支持单继承,不支持多继承,但可以多层继承。
状态修饰符
Final(最终态)
final关键字是最终的意思,可以修饰成员方法,成员变量,类
final修饰特点:final 修饰方法,表明该方法不能被重写
final 修饰变量, 表明该变量为常量,不能再次被赋值
final 修饰类,表明该类为最终类,不能被继承
final修饰基本类型的数据值不能改变
final 修饰引用类型是指引用类型的地址值不能改变,但是地址里面的内容是可以改变的
Static(静态)
static 修饰的特点
被类的所有对象共享( 这也是我们判断是否使用静态关键字的条件)
可以使用类名调用,当然,也可以使用对象名调用
推荐使用类名调用
static 访问的特点
总结成一句话: 静态成员方法只能访问静态成员
多态
概述:
同一个对象,在不同时刻表现出来的不同形态
多态的前提和体现
- 有继承/实现关系
- 有方法重写
- 有父类引用指向子类对象
多态中成员访问特点
- 成员变量:编译看左边,执行看左边
- 成员方法:编译看左边,执行看右边(原因是:成员方法有重写,而成员变量没有)
多态的转型
向上转型:从子到父
向下转型:从父到子
抽象类
在java中,一个没有方法体的方法应该定义为抽象方法,而类中如果有抽象方法,该类必须定义为抽象类
抽象类 用abstract定义,例如定义为抽象类:public abstract class Animal{ }
抽象方法 用abstract 定义,例如: public abstract void eat() 这里没有给出方法体
抽象类的特点
- 抽象类和抽象方法必须使用abstract关键字修饰
- 抽象类中不一定有抽象方法,有抽象方法的类一定是抽象类
- 抽象类不能实例化, 通过子类对象实例化,这叫抽象类多态
- 抽象类的子类,要么重写抽象类中的所有抽象方法,要么是抽象类
抽象类的成员特点
成员变量: 可以是变量 也可以是常量
构造方法: 有构造方法,但是不能够实例化
成员方法:
- 可以有抽象方法:限定子类必须完成某些动作
- 也可以有非抽象方法:提高代码复用性
接口
概述:接口就是一种公共的规范标准,只要符合规范标准,大家都可以通用
java中的接口更多的体现在对行为的抽象
接口用关键字interface 修饰
接口不能实例化, 可以参照多态的方式,通过实现类对象实例化,这叫接口多态
接口的实现类:要么重写接口中的所有抽象方法 要么是抽象类
成员变量: 只能是常量 默认修饰符:public static final
成员方法: 只能是抽象方法 默认修饰符: public abstract
类和接口的关系
- 类和类的关系: 继承关系, 只能单继承,但是可以多层继承
- 类和接口的关系:实现关系,可以单实现,也可以多实现,还可以在继承一个类的同时实现多个接口
- 接口和接口的关系: 继承关系,可以单继承,也可以多继承
抽象类和接口的区别
再次强调抽象类是对事物的抽象,接口时对行为的抽象
💕
内部类和Api
内部类
概述:就是在一个类中定义一个类。举例: 在一个类A 的内部定义一个类B,类B就称为内部类
内部类的访问特点
- 内部类可以直接访外部类,包括私有
- 外部类要访问内部类的成员,必须创建对象
成员内部类
格式:外部类名.内部类名 对象名=外部类对象.内部类对象;
局部内部类
局部内部类可以直接访问外部类的成员,也可以访问方法内的局部变量
匿名内部类
前提:存在一个类或者接口,这里的类可以是具体的类也可以是抽象类
格式: new 类名或者接口名(){ 重写方法;};
本质: 是一个继承了该类或者实现了该接口的子类匿名对象
常用Api
- Math
- System
- Objict
- Arrays
- Lambda
Lambda使用前提:
- 有一个接口
- 接口中有且仅有一个抽象方法
Lambda表达式的省略模式(规则)
- 参数类型可以省略。但是有多个参数的情况下,不能只省略一个
- 如果参数有且仅有一个,那么小括号可以省略
- 如果代码块的语句只有一条,可以省略大括号和分号,甚至return
Lambda表达式的注意事项
Lambda表达式和匿名内部类的区别
😂😂😂
包装类&日期Api&异常体系
包装类概述
int和String互换
自动装箱和拆箱
日期类Date
概述
Date常用方法
SimpleDateFormat 类
Calendar
💕💕💕💕
异常
异常处理
编译时异常和运行时异常的区别
异常处理之throws
自定义异常
throw 和throws的区别
总结
系统的讲了面向对象三大特征的概述,定义,实例化,成员访问,使用前提,注意事项,以及各种间的区别。
内容图片有点多,也有没有整理到的地方大家多包涵。