一.多态的概念和应用
概念:同一个引用类型,使用不同的实例执行不同的操作
方法重写是多态的基础
应用:使用父类作为方法的形参,是java中实现和使用多态的主要形式
使用父类作为返回值,也是java中实现和使用多态的主要形式
二.转型
向上转型 <父类型><引用变量名>=new<子类型>(); 例如:Pet pet = new Dog();
通过父类引用变量调用的方法是子类覆盖或继承父类的方法,不是父类的方法
通过父类引用变量无法调用子类的特有属性或方法
向下转型 <子类型><引用变量名>=(子类型)父类型的引用变量名; 例如:Dog dog = (Dog)pet;
向下转型过程中如果没有转换为真实子类类型,会出现类型转换异常(编译没错,运行出错 lang.ClassCastException;)
转换异常需要使用 instanceof 对象的类型必须和instanceof后面的参数锁指定的类在继承上有上下级关系
Pet dog =new Dog("多多",30.89."吉娃娃");
if(dog instanceof Dog ){
Dog d = (Dog)dog
d.XXXX //输出独有方法
}else if(dog instanceof Penguin){
Penguin p =(Penguin)dog
p.XXXX //输出独有方法
}
三.abstract抽象
结论:1.有抽象方法的一定是抽象类,抽象类不一定要有抽象方法
2.抽象类不能被实例化 Pet pet =new pet();
3.抽象类的子类可以是普通类,该普通类一定要实现抽象方法
4.抽象类的子类也可以是抽象类,此时父类中的抽象方法可以在子类不被实现
public abstract class Car {} -------------代表抽象类
public abstract void kanche(); -------------代表抽象方法
Object是所有默认类的父类,如已有父类属于间接父类,有四个基础属性均可以修改,常用的修改
toString 返回当前对象的有关信息,按字符串对象返回
equals 比较两个内存地址是否相同,与==没有区别,可以调用进行重写!
方法 |
说明 |
toString() | 返回当前对象本身有关信息,按字符串对象返回 |
equals() | 比较两个对象是否是同一对象(包括内存地址),是则返回true |
hashCode() | 返回该对象的哈希代码值 |
getClass() | 获取当前对象所属的类信息,返回class对象 |