接口
1:接口作用:制定规范
-------接口的作用就是把使用接口的人和实现接口的人分开,实现接口的人不必要关心谁去使用,而使用接口的人也不用关心实现的细节
2:接口是什么:是多个抽象方法的集合
3:接口体现了:体现了规范和实现相分离的思想以及低耦合(关联性很低)
定义语法
public interface 接口名{
//抽象方法1();
//抽象方法2();
//抽象方法3();
//接口中的方法都是公共的抽象方法等价于
抽象方法1(); == public abstract void 方法名();
}
类只可以单继承但是可以多重继承
接口可以多个*继承* 此时接口可以继承所有父类接口方法
public interface IWalkable {
void walk(); //走路
}
public interface ISwimable {
void swim(); //游泳
}
public interface IAmphibiable extends IWalkable,IWalkable{
}
接口的实现类
作用:实现接口所有没有实体的方法,且可以实现多个接口
语法:
public class 类名 implements 接口名1, 接口名2...{
//覆盖接口中抽象方法
//如果不覆盖 要么报错要么变为抽象类
}
注意:子类访问修饰符必须大于或者等于父类的方法
接口创建变量的方法
接口 变量 = new 实现类();
多态
作用:把不同的子类对象都当作父类来看,可以屏蔽不同子类对象之间的差异,写出通用的代码,做出通用的编程,适应多种变化.
多态的好处:降低耦合性
语法:
继承实现
public class Animal{}
public class Dog extends Animal{}
public class Cat extends Animal{}
//当遍历类型和运行不一致的时候多态就产生了
父类 变量名 = new 子类();
Animal d = new Dog();
Animal c = new Cat();
操作的方法:
d.方法();
c.方法();
接口实现
public interface Animal{}
public class Dog interface Animal{}
public class Cat interface Animal{}
接口 变量名 = new 实现类();
Animal d = new Dog();
d = new Cat();
//Cat和Dog都是属于一个接口的 所以这种操作就是d一只在被子类对象赋值
//然后谁给赋值 到时候d调用的方法就是谁的
操作方法;
d.方法(); //运行类型是Dog调用的方法就是Dog方法
d.方法(); //运行类型是Cat调用的方法就是Cat方法
当多态实现的时候方法调用顺序
类型转换:
作用:之所以需要强制类型转换是为了防止程序员在不知情的情况下把A类型数据错当成B类型的数据
自动类型转换:把子类对象赋值给父类变量(多态)
此时就是把Animal的多态转换到Object的多态了
Animal a = new Dog();
Object obj = new Dog();
强制类型转换:把父类对象赋值给子类类型变量(该对象的真是类型是子类类型)
子类的功能和属性比父类更强大 所以父类转子类需要强制转换
Animal a = new Dog();
Cat c = new Cat();
Dog d = (Dog)a;
c = (Cat)a;/*这里错误了 因为a的编译类型是Animal 然后运行类型是
Dog c的编译类型是Cat 所以报错了*/
//大转小自动转 小转大要强转 兄弟之间可以转 父子之间不能转换
Instance
作用:判断一个对象是否是一个类的实例
为什么此处要引出instance对象,在强转的时候可以判断转化到的类型是否和当前类型匹配
语法: boolean bl = 对象A instance 类B ;
如果要是A对象是类B的实例 那么转换是没有问题的 不然存在一个类型转化的异常 classCastException
贴个图
**
抽象类和接口有什么关系
抽象类:可以实和接口一样做到统一规范的作用 但是抽象类后期用他来实
现方法的较多
接口:就是统一规范的作用 里面全部为抽象方法 也就是一个抽象方法的集
和
多态的好处
- 可替换性。 多态对已存在的代码具有可替换性。
- 可扩展性。 增加新的子类不影响已存在类的多态性,继承性,以及其他特性的运行和操作,实际上新增功能更容易获得多态功能。
- 接口性。 多态是超类通过方法签名。 …
- 灵活性。 他在应用中提现了灵活多样的操作,提高了使用效率。
- 简化性
- 统一规范