向下转型
强制类型转换
子类引用指向父类对象,此处必须进行强转,可以调用子类特有的方法
父类中的静态方法无法被子类重写,所以向上转型之后,只能调用到父类原有的静态方法
instanceof运算符
判断对象是否是类的实例
返回值是布尔值
抽象类
abstract
抽象方法
定义时不允许包含方法体,子类中需要重写父类的抽象方法,否则子类也必为抽象类
抽象类不能直接实例化,只能被继承,可以通过向上转型完成对象实例
abstract定义抽象方法,不需要具体实现
包含抽象方法的类是抽象类,
抽象类中可以没有抽象方法
接口
-
接口定义了某一批类所需要遵守的规范
-
接口不关心这些类的内部数据,也不关心这些类里方法的实现细节,它只规定这些类里必须提供某些方法
新建类型:interface
类实现接口: implements +接口名
命名i开头
接口抽象方法可以不写abstract关键字,
访问修饰符默认public
当类实现接口时,需要去实现接口中的所有抽象方法,否则需要将该类设置为抽象类
接口中可以包含常量,默认public static final
default: 默认方法,可以带方法体
可以在实现类中重写,可以同接口名调用
static: 静态方法,可以带方法体
不可以在实现类中重写,可以同接口名调用
可以多个实现多个接口,用 , 隔开
接口,继承,在调用时出现的同名方法问题,同名常量问题
接口的继承
接口也可以实现继承关系,且可以继承多个父接口
同时存在 多个父接口中的同名方法问题
内部类
- 在Java中,可以将一个类定义在另一个类里面或者一个方法里面,这样的类称为内部类、
- 包含内部类的类称之为外部类
- 内部类在外部使用时,无法直接实例化,需要借由外部类信息才能完成实例化
- 内部类访问修饰符可以任意,访问范围会受到影响
- 内部类可以直接访问外部类成员方法属性;如果出现同名属性,优先访问内部类中定义的
访问外部类同名属性:外部类.this.成员
- 外部类访问内部类信息,需要通过内部类实例,无法直接访问
- 内部类编译后, .class文件命名: 外部类$内部类.class
分类:
- 成员内部类
普通内部类
- 静态内部类
- 方法内部类
- 匿名内部类
获取内部类对象实例方法
- new 外部类.new 内部类
People.Heart myHeart=new People().new Heart();
-
外部类对象.new 内部类
myHeart=lili.new Heart();
-
外部类对象.获取方法
myHeart=lili.getHeart();
静态内部类
- 静态内部类中,只能直接访问外部类的静态成员,如果需要调用非静态成员,可以通过对象实例访问
- 静态内部类对象实例时,可以不依赖于外部类对象
- 可以通过外部类.内部类.静态成员的方式,访问内部类中的静态成员
- 当内部类属性与外部类属性同名时,默认直接调用内部类中的成员
如果需要访问外部类中的静态属性则可以通过 外部类.属性 的方式
如果需要访问外部类中的非静态属性,则可以通过 new 外部类().属性的方式
方法内部类
定义在外部方法中的内部类
局部内部类
- 定义在方法内部,作用范围也在方法内
- 和方法内部成员使用规则一样,class前面不可以添加public 、private、protected、static
- 类中不能包含静态成员
- 类中可以包含 final、abstract的成员
匿名内部类
没有名字,隐藏名字
适用场景
-
只用到类的一个实例
-
类在定义后马上用到
-
给类命名不会影响到逻辑的场景
-
匿名内部类没有类型名称、实例对象名称
-
编译后的文件命名: 外部类$数字.class
-
无法使用p、p、p、a、s修饰
-
无法编写构造方法,可以添加构造代码块
-
不能出现静态成员
-
匿名内部类可以实习那接口,也可以继承父类,但是不可兼得
异常
异常本质上是程序的错误
编译期间 运行期间的错误
异常分类:
Throwable -Error 程序无法处理的错误,表示运行应用程序中较严重问题 (虚拟机错误、 内存溢出、线程死锁)
-Exception 程序本身可以处理的异常。异常处理通常指处理这种类型异常的处理(检查异常、非检查异常)
非检查:编译器认为不需要处理的异常
RuntineException
- 空指针异常
- 数组下标越界异常
- 算数异常
- 类型转换异常
检查:编译器要求必须处置的异常
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xR3K4WPY-1637226285663)(C:\Users\YANRONG.LEE\AppData\Roaming\Typora\typora-user-images\image-20211108231046914.png)]
异常处理:
在Java应用程序中,异常处理机制为:
- **抛出异常**
- **捕捉异常**
4-1开始写笔记
到StringBuilder