什么是多态?
多态是子类对象引用父类类型。
向上转型和向下转型
- 向上转型:子类对象指向父类引用
// Pet为抽象父类,Dog为子类,Pet中包含抽象方法toHospital();
Pet a=new Dog();//子类到父类的转换
a.toHospital();//会调用Dog的toHospital()方法,而不是调用父类Pet的方法。(a也无法调用Dog特有的方法了)
- 向下转型:父类引用赋值给子类引用
需要先用instanceof判断指向父类引用的子类对象和将要被赋值的引用的类是否存在继承关系
// Pet为抽象父类,Dog为子类,Pet中包含抽象方法toHospital();
Pet a=new Dog();//子类到父类的转换
a.toHospital();//会调用Dog的toHospital()方法,而不是调用父类Pet的方法。(a也无法调用Dog特有的方法了)
if(a instanceof Dog){
Dog dog=(Dog)a;
}
dog.CatchingFlyDisc();//CatchingFlyDisc是Dog子类特有的方法。(我为啥不新建一个Dog类呢,在这搞什么鬼哟)
抽象类和抽象方法
抽象类:用abstract修饰的类,该类不能被实例化,但是可以定义该类的引用;该类中不存在抽象构造方法,不存在静态方法。但是可以有普通方法和抽象方法。
抽象方法:abstract修饰的方法,没有方法主体,只能出现在抽象类中,而且必须在子类中全部得到实例化,否则报错。(为啥要报错,傻屌吧)(百度了一下,应该是不实例化的话,子类继承父类的抽象方法,自动晋升为抽象类,就麻烦了)
接口
接口可以理解为一类特殊的抽象类。
个人理解:一群子类有一个共同父类,但是其中的某些子类又有共同属性或者方法,这时候由于Java规定子类只能继承一个父类,所以只能独辟蹊径,搞了个接口,把这些共同的属性或方法再一次组合在一起,子类通过implements实现它,可以节省代码。
该类中的属性默认为public static final常量类型。该类中的方法为抽象方法;
一个子类可以继承父类,同时实现多个接口;这个子类必须把所有接口里的抽象方法给改写了。
public interface Jiekou1{
}
public class Zilei extends Fulei implements Jiekou1,Jiekou2,Jiekou3...{
}