JAVA-------多态+抽象类+接口+内部类

多态

多态

指的是一种事物,在不同时刻表现出的不同状态

前提
  • 要有继承
  • 要有重写,不重写也可以,但是不重写多态就没意义

​ 父类的引用指向子类对象

​ 父类 fu=new 子类();

多态访问成员特点
  • 多态的形式访问成员变量,编译看左边,运行看左边,访问的都是父类,
  • 多态的形式访问成员方法,编译看左边,运行看右边,编译期,看父类有没有这个方法,如果有就语法报错,实际调用时,是以子类重写过后的标准。当子类没有重写时,以父类为准
好处
  • 提高代码的复用性和维护性
  • 提高代码的扩展性
弊端
  • 不能调用子类特有的功能

​ 怎么才能调:

​ 采用向下转型,把父类转化为子类

多态就是向上转型

向下转型

使用强转符:()
为了保证不报ClassCastException,在向下转型前,进行判断:instanceof

在这里插入图片描述

Instanceof

instanceof一般使用于多态的时候,在代码中判断对象的引用类型具体为哪一种类型。返回结果是boolean类型的。
注意:

  1. instanceof关键字不能比较基本类型的数据;
  2. 可以对对象和接口使用;
  3. 比较是基于多态的;
  4. 右边比较的类型只能为类和接口

在这里插入图片描述

抽象类

抽象类

抽取所有子类的共性功能,但是不给出共性功能的具体实现,而是交由子类根据自身的差异做以具体的实现

如何实现
  • 通过关键字abstract来实现
定义格式
  • 抽象类格式: abstract class 类名 {}
  • 抽象方法格式: public abstract void eat();
语法特点
  1. 抽象类中,可以没有抽象方法,也可以有抽象方法。
  2. 一个类中,一旦有了抽象方法,此类就必须为抽象类。
  3. 抽象类,不能直接实例化,但是我们可以采用多态的形式,来间接实例化。
  4. 抽象类中所有抽象方法,强制子类必须重写
  5. 抽象类的子类有中选择
    1. 重写抽象类中的抽象方法
    2. 自己也是个抽象类
  6. 可以没有抽象方法,也可以有抽象方法。这样设计的考虑,非抽象方法,可以让子类直接继承使用,对于抽象方法,是要求子类必须重写的。
abstract

抽象的

abstract既可以修饰修饰类,也可以修饰方法

修饰类时

  1. 不可以被实例化
  2. 抽象类有构造器
  3. 抽象方法所在的类一定是抽象类
  4. 抽象类中可以没有抽象方法
  5. 当我们设计一个类,不需要创建此类的实例对象时,就可以考虑将其设置为抽象的,由其子类实现这个类的抽象方法以后,进行实例化

修饰方法时

  1. 没有方法体
  2. 抽象类只保留方法的功能,具体的实行,交给继承抽象类的子类重写
  3. 当子类重写抽象类中的所有抽象方法后,此类可以实例化
  4. 当子类重写抽象类中的抽象方法,但是没有全部重写,意味着此类中仍有抽象方法,则此类必须声明为抽象的
abstract不能共用的关键字

abstract 是强制子类重写

  • private 私有的,不能继承,无法重写
  • final 方法子类只能继承 不能重写
  • static 方法不参与重写

接口

接口

为了定义一些额外扩展的功能,哪些事物,想要具备这些功能,可以对该接口进行实现。

  1. 接口可以看做是一个特殊的抽象类,是常量与抽象方法的集合,不能包含变量,一般的方法
  2. 没有构造器
  3. 实现接口的类,必须重写其中的所有抽象方法,才可以实例化
  4. 一个类可以实现多个接口
  5. 接口与接口之间是继承关系
如何实现

接口用关键字interface表示

  • 格式: interface 接口名{}

类实现接口用implements表示

  • 格式:class 类名 implements 接口名{}
接口的成员特点
  1. 接口中的成员变量,全部都是公共的静态常量 前面存在默认修饰符 public static final

  2. JDK1.7之前,接口中的方法全部是抽象方法。方法前存在默认修饰符public abstract

    JDK1.8之后,可以给出方法的具体实现,需用要关键字default修饰;接口中可以定义静态方法

  3. 接口中没有构造方法

  4. 接口不能直接new对象

抽象类和接口的区别

  • 抽象类:可以定义抽象方法,也可以定义非抽象方法

接口:接口里面定义的是抽象方法,JDK1.8之后可以定义default修饰的方法和静态方法

  • 抽象类:有构造方法

接口:没有构造方法

  • 抽象类:可以定义成员变量,也可以定义常量

接口:全是公共静态常量

设计思想:

  • 抽象类:抽取所有子类共性功能,并不给出共性功能的具体实现,而是交由子类根据自身的差异性,去做具体实现
  • 接口:定义一些规范和规则,哪类事物想要具备这些扩展功能,可以实现具体的接口。接口只需要维护一套规范,由子类具体去实现

关系

类和类之间的关系:

  • extends 继承关系 只能单继承

类和接口之间的关系:

  • implements 实现关系 可以多实现

接口和接口之间的关系:

  • extends 继承关系 可以多继承 一个接口可以继承多个接口

内部类

在类的内部再定义一个类,外面的类就是外部类,里面的类就是内部类
成员内部类
局部内部类
静态内部类
匿名内部类

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值