10.11 接口之间的多继承
- 类与类之间是单继承的,直接父类只有一个;
public class Zi extends Fu {
}
- 类与接口之间是多实现的,一个类可以实现多个接口;
package com.xww.day10.demo01;
//这是实现类
public class MyInterfaceAbstractImpl implements MyInterfaceA,MyInterfaceB{
}
- 接口与接口之间是多继承的;
- 多个父接口当中的抽象方法如果重复,没有关系;
- 多个父接口当中的默认方法如果重复,那么子接口必须进行默认方法的覆盖重写。
package com.xww.day10.demo01;
public interface MyInterface extends MyInterfaceA,MyInterfaceB{
@Override
default void method() {//父接口当中重复的默认方法,必须覆盖重写
System.out.println("重写A和B当中的重复默认方法");
}
}
10.12 多态的格式与使用
- 代码中体现多态性,其实就是,父类引用指向子类对象。
- 格式:
父类名称 对象名 = new 子类名称();
接口名称 对象名 = new 实现类名称();
public class Demo1Muti {
public static void main(String[] args) {
//左侧父类的引用,指向了右侧子类的对象
Fu obj = new Zi();
obj.method();
}
}
10.13 多态中成员变量的使用特点
- 直接通过对象名称访问成员变量,看等号左边是谁,优先用谁,没有则向上找;
- 间接通过成员方法访问成员变量,看该方法属于谁,优先使用谁,没有则向上找。
public class Fu {
int num = 5;
int f = 6;
public void show(){
System.out.println(num);
}
}
public class Zi extends Fu{
int num = 2;
int zz = 0;
}
public class DemoMuti {
public static void main(String[] args) {
Fu obj = new Zi();
System.out.println(obj.num);//结果为 5 ,
// System.out.println(obj.zz);//错误写法,父类想上找,找不到变量 zz
System.out.println(obj.f);//结果为 6 ,
obj.show();//间接访问成员变量
}
}
10.14 多态中成员方法的使用特点
- 成员变量:编译看左边,运行还看左边
- 成员方法:编译看左边,运行看右边
public class DemoMuti2 {
public static void main(String[] args) {
Fu obj = new Zi();//多态
obj.method();//父子都有,优先用子
obj.methodFu();//子类没有,父类有,向上找父类
//编译看左边,左边是Fu,Fu当中没有methodZi方法,所以编译报错
//obj.methodZi();//错误写法
}
}