Java中的多态、抽象类、接口 超细解析

一、多态

 

1.1 概念

程序中的多态:父类变量指向多个子类对象,当调用父类被重写的方法时,不同的子类有不同的结果。

多态:父类对象表现多种子类的形态的能⼒的特征,⼀句话多态就是⽗类引⽤⼦类对象。 向同⼀个⽗类的不同⼦类 发送同⼀条消息,⾏为不同。

        对于父类中的一个方法,在不同子类中有不同的实现。父类引用子类对象,调用父类被重写的方法时,子类有不同的响应。

程序设计中为什么使用多态:

        实现程序设计的开-闭原则,对扩展开放,对修改关闭

1.2 如何实现程序中的多态(里氏替换原则)        

        1.子类继承父类,重写父类方法。

        2.定义父类变量(引用)指向子类对象。

        3.调用父类被重写的方法时,不同子类有不同结果。

二、抽象类

抽象类:使用abstract关键字修饰的类。

 [权限修饰符] abstract class 类名{}

抽象方法: 使用abstract关键字修饰的方法 注意:抽象方法没有方法体,也没有{}

 [权限修饰符] abstract 返回值 方法名();//没有大括号

抽象类的特点:

        1.抽象类不能创建对象,不能new对象

        2.抽象类可以定义抽象方法,也可以没有抽象方法

        3.有抽象方法 的类一定要定义成抽象类

        4.抽象类中可以定义实例方法

        5.抽象类可以定义构造方法,在子类中可以调用抽象类的构 造方法

        6.子类继承了抽象类,则一定要重写/实现其中的抽象方法,如果没有实现父类的抽象方法,则子类也要变成 抽象类

        7.抽象方法需要在方法前写abstract关键字,并且不能有方法体(不能写大括号)

抽象类的作用:定义共性的属性和行为,主要是让子类继承,抽象类本身不能new对象。

三、 接口

接口:是实现多态的另一种手段。

接口:一种标准、规范。对行为(方法)的抽象;一系列抽象方法的集合;公共的规范,大家都要遵从这个规范使用。定制规则,展现多态

接口和抽象类的地位等同,作为顶级存在(父类)。

接口关键字:interface

实现接口:implements

实现接口意味着拥有了接口所表示的能力

接口和抽象类实现多态的区别:

如果一组对象有共同属性和行为,此时应该用抽象类去进行结构设计。

如果一组对象没有共同属性,只有共同行为,此时应该用接口去进行结构设计。

接口(interface)实现多态步骤:

1.定义实现类实现(implements)接口

 [权限修饰符] class 类名 implements 接口1,接口2,接口3。。。{} 
 eg:public class Mouse implements USB{}

2.定义接口变量指向实现类对象。

3.调用接口被实现的抽象方法时,不同对象有不同行为。

注意:如果实现类没有覆盖重写接口中的方法,那么这个实现类自己就必须是抽象类。

接口的特点:

  1. 一个实现类可以实现多个接口,并且要实现接口中的所有方法。

  2. 一个类在继承其他类的同时可以实现其他接口。

  3. 接口可以继承接口。实现类实现一个接口时,要实现接口继承过来的所有方法。

  4. 接口中可以定义变量,但是接口中的变量必须是公有的静态(static)常量(final)。

  5. 接口中的方法:

    a. 在jdk1.8之前都只能是公有抽象的方法(方法上有abstract关键字,并且不能有方法体。

    b. 在jdk1.8之后

    1) 接口可以有抽象方法。

    2) 也可以有默认方法(用default关键字修饰,有方法体),可以被实现类直接使用,也可以被实现类重写。

    3) 也可以有静态方法(用static关键字修饰,有方法体),可以通过接口名直接调用,不能被实现类重写。

  6. 接口不能实例化,不能有构造方法。

  7. 子类实现接口必须实现接口中的所有方法。

四、 向上转型 向下转型

向上转型:⽗类引⽤⼦类对象(⾃动成⽴,缺点是失去调⽤⼦类独有⽅法的能⼒)

向下转型:⼦类引⽤⽗类对象(强制转换,慎重)

 

你可能感兴趣的:(java,开发语言,后端)