Java中的多态和接口

目录

1、多态

1.1 、什么是多态

1.2 、为什么使用多态

1.3 、如何实现多态

1.4、 向上转型/向下转型

2、 抽象类

2.1、 概念

2.2、 抽象类和抽象方法的定义

3、接口

3.1、 概念

3.2、 java中的接口

3.3、 接口特点

4 、接口和抽象类的区别

5、总结


1、多态

1.1 、什么是多态

        多态(Polymorphism)按字面的意思就是“多种状态”。在面向对象语言中,接口的多种不同的实现方式即为多态。简单的说,就是一句话:允许将子类类型赋值给父类类型。

        多态的前提是继承和方法重写

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

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

1.2 、为什么使用多态

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

1.3 、如何实现多态

        1).继承:子类继承父类

        2).重写:子类方法重写父类方法

        3).向上转型:父类引用指向子类对象

        4).调用父类被重写的方法时,不同的子类效果不同

1.4、 向上转型/向下转型

        向上转型(装箱):父类引用子类对象(自动成立,缺点是失去调用子类独有方法的能力)

父类变量指向对象,此时只能通过父类变量访问父类中定义的内容,子类的东西是访问不到的,向上转型之后,子类的细节被屏蔽。

        向下转型(拆箱):子类引用父类对象(强制转换) ,需要使用instanceof进行类型判断

如果想要访问子类的内容,需要进行向下转型,向下转型时可以通过instanceof(返回true/false) 关键字测试父类指向的对象类型

2、 抽象类

2.1、 概念

        抽象类:如果一个类只是一个概念,没有具体的形象,我们可以把这个类定义为抽象类

        抽象类的关键字:abstract

        抽象类的使用场景:一般作为顶层类(父类),被子类继承

2.2、 抽象类和抽象方法的定义

        抽象类的存在不是为了创建对象,是为了让子类继承用的。

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

[权限修饰符]  abstract  class  类名{}
抽象方法: 使用abstract关键字修饰的方法  注意:抽象方法没有方法体,也没有{}
[权限修饰符]  abstract  返回值  方法名();//没有大括号

抽象类的特点:

1.抽象类能创建对象,new不能是new他们自己,但可以new他们的实现类,即不能直接创造对象(实例化)。抽象类的关键字是abstract。

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

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

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

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

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

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

3、接口

3.1 、概念

        接口:

  • 一种标准、规范,大家都要遵从这个规范使用;
  • 对行为(方法)的抽象(与抽象类对比,抽象类有特征和行为,而接口只关注行为);
  • 一系列抽象方法的集合;
  • 定制规则,展现多态;
  • 接口和抽象类的地位等同,作为顶级存在(父类)
  • 实现接口意味着拥有了接口所表示的能力

接口关键字:interface

实现接口:implements

3.2、 java中的接口

        接口定义的格式:

[权限修饰符] interface 接口名{}

接口的使用步骤:

1.接口中的方法不能直接使用,必须有一个实现类来实现接口[权限修饰符] class 类名 implements 接口1,接口2,接口3。。。{}
2.接口的实现类必须(覆盖重写)实现 接口中所有的抽象方法
3.创建实现类的对象,进行方法的调用。注意:如果实现类没有覆盖重写接口中的方法,那么这个实现类自己就必须是抽象类。

接口中可以包含的内容:

        1、常量

 // 接口中的常量使用public static final 三个关键字修饰。 
// 定义常量的格式 public static final int AGE = 10;
 // 使用接口中的常量 接口名.常量名

        2、抽象方法

        接口中的抽象方法必须是两个固定的关键字修饰  public abstract。这两个关键字可以省略不写。

        3、默认方法(jdk1.8之后新增)

        default 增强接口的通用能力

default   返回值 方法名(){} //默认方法有方法体

        4、静态方法(jdk1.8之后新增)

        提供通用实现,接口中的静态方法只能通过接口名调用,不能通过实现类调用

static 返回值 方法名(){} // 静态方法有方法体

3.3、 接口特点

        1、接口不能直接创造对象(实例化),不能有构造方法

        2、接口中的方法都是抽象方法,jdk8之后接口中可以定义默认方法和静态方法

        3、接口中的成员变量默认都是public static final修饰的

        4、实现类实现接口必须实现接口中的所有方法

        5、多实现:一个类可以实现多个接口

        6、接口可以继承接口:A extends B

4 、接口和抽象类的区别

        应用场景:抽象类是对事物属性和行为的抽象,符合is...a关系;

                 接口是对行为的抽象,实现接口,拥有相应的功能;

        相同点:都是顶级的父类存在的

        1.构造方法

        抽象类里面有构造方法 但是不能被new出来

        接口里面没有构造方法

        2.继承

        抽象里面 java单继承 一个类只能继承一个抽象父类

        接口可以继承多个接口,一个类可以实现多个接口

        3.抽象方法

        抽象类里面可以没有抽象方法,有抽象方法的类必须是抽象类

        接口里面的方法是必须是抽象方法,只有方法名没有方法体,如果不是抽象方法就必须是default修饰的方法

        抽象类里面的抽象方法是用public abstarct来修饰的 接口中的方法public abstract可以省略

        变量:接口中的常量是用 static 、final修饰的

5、总结

        类与类之间是单继承的

​        类与接口是多实现的:一个类可以实现多个接口(这个要将所有实现的接口中的抽象方法都实现),方便后期维护(修改,扩展)

        接口与接口之间是多继承的:一个接口A如果继承了接口B和接口C,那么A接口可以同时拥有B和C接口的所有功能,并且还可以拥有属于自己的方法。

        接口没有构造方法。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值