接口 interface
一个类中的所有方法都是抽象方法的时候,这个类叫做接口
规则性、可扩展性
使用:
定义一个接口
public interface Inter{
void show();
}
实现接口 定义一个类用implements 接口名
public class InterImpl implements Inter{
//复写方法
public void show(){
//方法体
}
}
接口成员特点:
构造方法:接口没有构造方法 所以也就不能创建对象
成员变量:默认被public static final修饰
成员方法:默认被public abstrace修饰(因为接口中都是抽象方法,所以省略了)
在jdk7以后对接口更新了:
jdk7:接口都是抽象方法,子类都必须重新
jdk8:
允许在接口中写默认方法 被public default修饰 可选重写
然后一个类继承多个接口,而多个接口有相同的默认方法时,这个类必须重写!因为不重写调用相同的方法时,系统不知道调用哪一个放法,从而报错。
允许写静态方法:使用接口名调用
jdk9:允许在接口中写私有方法,只能在本接口中使用该私有方法
接口和类
类和类:单继承 多层继承
类和接口:多继承
接口和接口:多继承
一个类继承父类和实现接口不冲突
多态
1、理解:一个对象有多种形态
比如:Animal a = new Dog();
Dog g = new Dog();
Fu fu = new Zi()
2、多态的前提:
继承/实现 + 重写方法 + 父类引用接收子类对象
成员的访问特点
成员变量:编译的时候看左边,运行的时候也看左边 就是说成员变量看父类
成员方法:编译看父类,运行看子类,因为子类复写了父类的方法。
3、好处
在一个方法里面把参数写成父类类型,这样就可以使用任何子类的方法了
4、弊端
只能使用所有子类共有的方法、不能使用子类特有的方法
转型:向上转型----多态的体现
向下转型-----1、加一个判断 fu instanceof zi 结果为true的话就调用特有的方法 2、强制转换 Zi z = (Zi)fu
向下转型可能会出现ClassCastException的错误