如果一个子类的变量和一个父类的的变量完全一样,则称这个子类的变量隐藏了父类的同名变量。
java仅支持类间的多重继承。
父类和子类之间的引用
Person person=new Student();
对于属性来说: 会直接调用父类的属性,没有父类的属性会直接报错
对于静态属性来说:会直接调用父类的静态属性,没有直接报错。
对于方法来说:父子类要有相同的方法,有的话调用子类,子类没有默认调用父类的,父类没有直接报错
对于静态方法来说:父类直接调用父类的person的静态方法,静态没有直接报错
Student student=new Student();
对于静态属性来说:直接调用子类的静态属性,子类没有静态属性,直接调用子类的静态属性。
对于属性来说:和静态属性一样。
对于方法来说:查看子类是否有此方法,没有此方法调用子类方法
对于静态方法来说:和方法一样。
实现类和接口的引用
Animal ani=new Dog();
对于属性来说:会直接调用接口的属性,接口如果没有此属性直接会报错。
对于静态方法来说:接口类的静态方法只能通过类名调用。没有办法通过父类的引用调用和子类的实例调用。
对于default来说:首先查看实现类中是否有次同名的非default的方法名,有的话直接调用实现类的,没有的话直接调用接口的
对于普通方法来说:查看接口和实现类共有的方法,实现类由此相同的方法直接调用,如果实现类独有的方法,不能直接调用。
Dog dog=new Dog();
对于属性来说:先调用和接口同名的属性,如果不存在,则调用接口的属性。
对于静态方法来说:无法调用。
对于default方法来说:先查看实现类有没有同名方法,有点话调用子类的,没有的话调用父类的
对于普通方法:实现类直接调用实现的方法。