课程回顾:
访问修饰符
private--->default--->protected---->public
重写:子类中
1、访问修饰符不能比父类的更严格
2、静态/非静态、返回值类型、方法名、形式参数类型必须相同
递归:方法内部出现了自己调用自己
abstract:关键字 抽象的
1、修饰类:抽象类
2、修饰方法:抽象方法
final:关键字 最终的
1、类
不能被继承
2、变量
常量
3、方法
不能被重写
今日内容:
java原则之最佳匹配性原则
在调用重载方法时,会优先选择最适合的方法
abstract:关键字 抽象
1、抽象类:修饰类
如果遇到某类不能实例化,我们可以将其写成抽象类
如果某类包含了抽象方法,我们必须将该类写成抽象类
2、抽象方法:修饰方法
格式:[修饰符] abstract返回值类型 方法名([形式参数列表]);
抽象方法只有方法的声明,没有方法的实现
abstract不能修饰静态方法
抽象方法也不能是private
练习:请写一个类Person,属性若干,有抽象方法study、eat
并且写若干子类
创建测试类,创建若干张子类对象调用方法
接口:是由常量和抽象方法组成的结构体
接口中的属性:默认拥有 public\static\final
接口中的方法:默认拥有public\abstract
interface:关键字 声明接口
接口的创建格式:
[修饰符] interface接口名{
常量
抽象方法
}
接口不能实例化
java允许多实现,允许一个类实现多个接口
implements:关键字 实现
主要是应用在类中进行实现接口(也就拥有了接口中的方法)
接口可以继承(extends)多个接口,多个接口之间使用,隔开
类可以实现(implements)多个接口,多个接口之间使用,隔开
抽象类和接口的区别?
抽象类:
不能实例化
只能单继承
可以有普通方法、静态方法、构造方法、属性、静态属性
可以有抽象方法
接口:
不能实例化
可以多实现
还可以多继承(接口)
只能有常量和抽象方法
在开发中,我们优先选择接口
抽象类和接口能否作为数据类型使用?
多态:多种形态
多态的分类:
1、静态化(编译时)多态
重载
2、动态化(运行时)多态
重写
对象转型
1、向上转型:子类对象可以充当父类对象,自动转换的过程
父类 对象名=new 子类([实际参数列表]);
2、向下转型:父类对象可以充当子类对象(父类对象本来就是由子类对象充当的),强制转换的过程
子类 对象名=(子类)父类对象名;
再向下转型之前,一般都使用instancof进行验证,能否转型成功
instanceof:关键字 验证左边的对象是否为右边的类型
格式:对象名 instanceof 类名;
返回值类型为boolean型
常常用来向下转型前的验证
想向下转型那么一定的先向上转型
接口回调:声明一个接口类型的变量,通过实现类对象完成变量的实例化,
最后使用接口变量调用接口中的方法,这一过程我们称为接口回调
Object类中的equals方法:
public boolean equals(Object obj)
==和equals的区别?
大多数都是没有区别的,都是比较的栈内存的数据
只有String等类才是有区别
因为String类对equals方法进行重写,比较的是字符串的内容是否相同
包装类的equals也都重写了,比较的是内容