王道JAVA随堂笔记

ⅰ亾dé卋堺 提交于 2020-01-08 09:59:41

DAY 9

一、多态

1.多态是什么

多态是某一个事物在不同时刻或者不同条件下表现出来的不同状态。

java语言中的多态:“同一个对象”的行为(方法),在不同的时刻或条件下,表现出不同的效果。

2.多态的发生

多态的发生条件:

  1. 继承(多态一定要继承行为)
  2. 子类,一定要覆盖父类中,要发生多态的方法(行为)
  3. 父类引用指向子类实例

3.多态

多态:

  1. 编译时多态(方法重载):
    2. 运行时多态:今天所讲的多态

4.多态中成员访问的特点

成员属性和成员方法:
编译看左边
引用变量的类型,规定了我们通过引用变量能访问到的对象的成员

运行看右边
究竟实际执行的方法

多态的优缺点

优点:

  1. 解决代码冗余的问题
  2. 使我们的程序可扩展性更好
    缺点:
  3. 多态不能访问子类特有的方法
    (为了解决多态无法访问子类特有的方法,我们可以使用向上转型和向下转型。)

为了保证向下转型是安全的,这里我们采用instanceof来判断当前对象是否是当前类的对象。

instanceof语法:对象名 instanceof 类名
返回值是boolean型;

**注意:**null instanceof 任意类型结果都是false

二、抽象类

1.引入

  1. 当一个方法只有方法声明的时候,也就意味着它没有具体的方法实现,——> 抽象方法 必须使用abstract关键字来定义
    2. 当一个类中包含了抽象方法,那么这个类似乎是不完整的, ——> 抽象类

2.什么是抽象类

抽象类的定义:包含有抽象方法的类或被abstract修饰的类

3.抽象类的特征

1.抽象类和抽象方法必须用abstract关键字修饰
  abstract class 类名 {}
  public abstract void eat();


2. 抽象类不一定有抽象方法,有抽象方法的类一定是抽象类

3. 抽象类不能直接实例化, 间接实例化
   Animal animal = new Cat();

4. 抽象类的子类
    a. 可以是抽象类
    b. 也可以是具体类

抽象类的成员特点:

  • 构造方法:同普通类 也就是说抽象类和普通,都可以有构造方法

  • 成员变量:同普通类

  • 成员方法:可以是抽象方法,也可以是具体的普通方法

abstract关键字不能与哪些关键字同用

  • final关键字
  • static关键字
  • private关键字

原因在于这些关键字修饰的方法都无法被覆写,但是抽象方法必须被覆写,与之矛盾

三、接口

定义

接口: 接口在java语言中和class是并列关系 -> 也表示一种类型

格式

接口用关键字interface表示
格式:interface 接口名 {}

在接口定义中:

  • 成员变量默认修饰符: public static final
  • 成员方法而言默认修饰符:public abstract

接口的组成特征

(jdk1.7及以前):

  1. 成员变量: 只能是自定义常量
  2. 成员方法: 只能有抽象方法

jdk8及以后接口中,不仅仅可以有抽象方法,还可以有:

  1. 默认方法
  2. 静态方法

接口和类从类型表示的角度来讲侧重点不一样
类: 从数据集合和基于这组数据集合的操作来表示类型
接口:重在描述一个功能的集合(抽象)

接口不能直接实例化, 但是可以间接实例化 MyInterface m = new 子类名

类和接口的关系

类和接口有关系:类实现接口用implements表示 (implements实现关系,可以理解为一种继承关系)

接口的子类:

  1. 未实现接口中声明的,所有抽象方法,此时只能是抽象类
  2. 如果子类实现了,接口中所声明的所有的抽象方法, ——> 普通类

接口与抽象类比较

java 所谓实现了多重继承? ——> 接口实现了真正多重继承

抽象类 vs 接口:

  1. 都可以包含抽象方法
  2. 抽象类和接口都可以表示类型

成员的区别:

  1. 抽象类有构造方法,接口没有
  2. 抽象类成员变量和普通类没有任何区别,接口成员变量只能是自定义常量
  3. 抽象类可以包含普通方法,接口只能包含抽象方法(jdk1.7及之前)

关系的区别

  1. 类与类 继承(单重继承)
  2. 类与接口 实现,单实现,多实现
  3. 接口与接口 继承,单继承,多继承

设计理念区别

  1. 抽象类 被继承体现的是:”is a”的关系。描述继承关系中子类和父类的关系
  2. 接口 被实现体现的是:”like a”的关系
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!