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类型转换异常。在转换之前必须做类型判断。

posted @ 2020-09-28 15:45  ldldl  阅读(105)  评论(0)    收藏  举报