1.多态
概念:一种事物的多种表现形态(行为多态)
多态的最终表现形式:父类引用指向子类对象 eg:Ani a = new Cat();
多态的前提:1.继承|实现
2.子类中有方法的重写
成员变量:1.编译运行看父类 2.编译看左边
成员方法: 编译看父类 运行找子类
必须要在父类定义这个方法,才能通过编译,把多态对象看作是父类类型 ,必须要在子类重写这个方法,才能满足多态,实际干活的是子类
2.转型
向上转型:子类--->父类
父类 父类实例 = 子类实例
向下转型:父类--->子类
子类类型 变量 = (子类类型)父类引用
什么时候使用向下转型?
当多态调用不能调用子类独有的内容时,通过向下转型调用子类独有的内容
在向下转型的时候如果转化成其他的子类类型就会发生类型转化异常:java.lang.ClassCastException
instanceof 运算符 判断前面的引用是否指向后面类型的对象 或子类对象
3.object 类
如果一个类没有显示的继承父类,默认继承Object类
toString()方法 :
Object
类的 toString
方法返回一个字符串,该字符串由类名(对象是该类的一个实例)、at 标记符“@
”和此对象哈希码的无符号十六进制表示组成。换句话说,该方法返回一个字符串,它的值等于:
getClass().getName() + '@' + Integer.toHexString(hashCode())
equals:判断两个对象是否相等 使用Object方法 默认比较对象地址,
4.抽象类
abstract 关键字抽象 把子类共性功能提出出来,但实现方法体根据子类不同而不同,则不用写方法体。
抽象方法:
没有方法体
被abstract修饰的方法是抽象方法
必须存在与抽象类(被abstract修饰的类)
注意:
1.抽象类不能实例化(因为抽象类没有方法体),但可以通过new子类来实例化抽象类
2.抽象方法必须存在于抽象类中
3.抽象类中可以定义抽象方法也可以不定义抽象方法(任意内容),普通方法。
4.抽象类的使用:
(1)具体子类对象调用成员
重写所有的抽象方法+按照需要新增内容
如果没有实现全部的抽象方法,则改类也是一个抽象类(抽象子类)
5.抽象方法必须被重写,但是只需要重写一次,就需重写多次
6.abstract不能与private,final,static,native一起使用