java
接口
概念:接口是功能的集合,同样可看做是一种数据类型,是比抽象类更为抽象的”类”。
接口只描述所应该具备的方法,并没有具体实现,具体的实现由接口的实现类(相当于接口的子类)来完成。
格式
public interface 接口名{
抽象方法;
}
实现
class 类名 implements 接口名{
重新接口中的抽象方法;
}
实现与继承类似,但是一个类可以实现多个接口,接口与接口之间为继承关系且可以多继承,实现也可以与继承同时存在,格式为:
class 子类名 extends 父类名 implements 接口名{
}
成员
1、接口中可以定义变量,但是变量必须有固定的修饰符修饰,public static final 所以接口中的变量也称之为常量,其值不能改变。
2、接口中可以定义方法,方法也有固定的修饰符,public abstract
3、接口不可以创建对象。
4、子类必须覆盖掉接口中所有的抽象方法后,子类才可以实例化。否则子类是一个抽象类。
好处:
1、接口的出现扩展了功能。
2、接口其实就是暴漏出来的规则。
3、接口的出现降低了耦合性,即设备与设备之间实现了解耦。
接口与抽象类的异同
相同点:
1.都位于继承的顶端,用于被其他类实现或继承;
2.都不能直接实例化对象;
3.都可以包含抽象方法,其子类都必须覆写这些抽象方法;
区别:
1. 抽象类为部分方法提供实现,避免子类重复实现这些方法,提高代码重用性;接口只能包含抽象方法;
2.一个类只能继承一个直接父类(可能是抽象类),却可以实现多个接口;(接口弥补了Java的单继承)
3. 抽象类是这个事物中应该具备的内容, 继承体系是一种 is..a关系
4.接口是这个事物中的额外内容,继承体系是一种 like..a关系
二者的选用:
1. 优先选用接口,尽量少用抽象类;
2.需要定义子类的行为,又要为子类提供共性功能时才选用抽象类;
多态
Java中多态的代码体现在一个子类对象(实现类对象)既可以给这个子类(实现类对象)引用变量赋值,又可以给这个子类(实现类对象)的父类(接口)变量赋值。
最终多态体现为父类引用变量可以指向子类对象。
多态的前提是必须有子父类关系或者类实现接口关系,否则无法完成多态。
在使用多态后的父类引用变量调用方法时,会调用子类重写后的方法。
格式
父类类型 变量名=new 子类类型();
成员
成员变量
当子父类中出现同名的成员变量时,多态调用该变量时:
编译时期:参考的是引用型变量所属的类中是否有被调用的成员变量。没有,编译失败。
运行时期:也是调用引用型变量所属的类中的成员变量。
简单记:编译和运行都参考等号的左边。编译运行看左边。
成员方法
编译时期:参考引用变量所属的类,如果类中没有调用的方法,编译失败。
运行时期:参考引用变量所指的对象所属的类,并运行对象所属类中的成员方法。
简而言之:编译看左边,运行看右边。
instanceof(来判断某个对象是否属于某种数据类型)
booleaan 变量名 =对象名 instanceof 数据类型;
转型
向上转型:直接转,当不需要面对子类类型时,通过提高扩展性,或者使用父类的功能就能完成相应的操作,这时就可以使用向上转型。
父类类型 变量名=new 子类类型();
向下转型:强转,当要使用子类特有功能时,就需要使用向下转型。
子类类型 变量名=(子类类型)父类类型变量名;
向下转型的好处:可以使用子类特有功能。
弊端是:需要面对具体的子类对象;在向下转型时容易发生ClassCastException类型转换异常。在转换之前必须做类型判断。

浙公网安备 33010602011771号