今天学习多态,内容很多,也很抽象,还好最后还是掌握了!下面给大家介绍一下!
多态就是多种状态:同一个行为,不同的子类表现出来不同的形态。
同一个引用类型,使用不同的实例而执行不同操作 !
多态的好处:
为了提高代码的扩展性,符合面向对象的设计原则:开闭原则(指的就是扩展是开放的,修改是关闭的。)
多态有三个要素:
继承:子类继承父类
重写:子类对父类方法的重写
父类引用指向子类对象;
多态有向上转型和向下转型两种;我们目前应用向上转型多一些,先介绍一下!
向上转型:
子类对象应用父类类型
1、父类中的方法被子类重写
2、在别的类中,有一个参数为父类内型的方法,调用了被重写的方法
3、调用时(传递实参时),实参是子类对象,那么就会调用该子类对象重写后的方法
<父类型> <引用变量名> = new <子类型>();
此时通过父类引用变量调用的方法是子类覆盖或继承父类的方法,不是父类的方法
此时通过父类引用变量无法调用子类特有的方法;
向下转型:
需要调用子类特有的方法;将一个指向子类对象的父类引用赋给一个子类的引用,即:父类类型转换为子类类型。需强制类型转换;
<子类型> <引用变量名> = (<子类型> )<父类型的引用变量>;
在向下转型的过程中,如果没有转换为真实子类类型,会出现类型转换异常;
用instanceof判断,减少在向下转型的过程中,没有转换为真实子类类型的类型转换异常;
使用instanceof时,对象的类型必须和instanceof后面的参数所指定的类在继承上有上下级关系,(用于判断一个引用类型所引用的对象是否是一个类的实例)
抽象方法和抽象类: abstract
抽象类:public abstract class Pet {
public void toHospital() {
}
}
抽象方法public abstract void print();
抽象方法没有方法体
抽象方法必须在抽象类里
抽象方法必须在子类中被实现,除非子类是抽象类
抽象类不能建立对应的实例;
Object类:Object类是所有类的父类
其实前两个重写的多一些,先说toString();
toString();比较简单,先用alt+insert,然后选择toString();按下图操作,就会产生一个toString()方法,你把它改成你想要的就可以了!下面一个是我改的!
equals.()其实和==作用差不多,下面看看我的改下!
今天差不多了,下次再见!



