Java_1_10

本文深入探讨了Java中多态的概念,包括其存在的三个必要条件、成员访问特点及转型方式。同时,详细解析了抽象类和接口的特性,以及它们之间的区别,为读者提供了全面的理解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

多态 polymorphism

  • 同一个对象,在不同时刻表现出来的不同状态

1.多态存在的3个必要条件:

  • 要有继承/实现关系
  • 要有方法重写
    • 因为没有方法重写的多态是没有意义的
  • 有父类引用指向子类对象
    • Animal a = new Cat();

2.多态中成员访问特点

成员变量
  • 编译看左边,执行看左边
    • 父类引用不能使用子类特有的成员变量
成员方法
  • 编译看左边,执行看右边
    • 父类引用不能使用子类特有的成员方法,但可使用重写方法
    • 因为成员方法有 重写,成员变量没有

3.多态的好处和弊端

好处
  • 提高程序的 扩展性
    • 使用父类型作为参数,使用时用具体的子类型参与操作
弊端
  • 不能访问子类的特有成员变量、特有成员方法

4.多态的转型

  • 向上转型
    • 从子到父
    • 父类引用指向子类对象
    • Animal a = new Cat();
  • 向下转型
    • 从父到子
    • 父类引用转为子类对象
    • Cat c = (Cat)a;

抽象类

  • 在java中,一个没有方法体的方法应该被定义为抽象方法
  • 如果类中有抽象方法,该类必须被定义为抽象类

抽象类特点

  • 抽象类和抽象方法必须使用 abstract 关键字修饰
    • public abstract class name{}
    • public abstract void eat();
  • 抽象类中不一定有抽象方法,有抽象方法的类一定是抽象类
  • 抽象类不能实例化
    • 因为抽象方法没有方法体,实例化对象调用抽象方法会出错
    • 只能参照多态的方式,对子类对象实例化,这叫抽象类多态
  • 抽象类的子类
    • 要么重写抽象类中的所有抽象方法
    • 要么本身是抽象类

抽象类的成员特点

  • 成员变量
    • 可以是变量
    • 也可以是常量
  • 构造方法
    • 有构造方法,但不能实例化
    • 此处的构造方法是用于子类访问父类数据的初始化
  • 成员方法
    • 可以有抽象方法:限定子类必须完成某些动作
    • 也可以有非抽象方法:提高代码复用性

abstract 不能和哪些关键字共存

private

  • 因为抽象方法存在的意义就是为了让子类重写的,如果有private修饰的话,子类看不到所以无法重写。

final

  • final 修饰的类不能被继承,修饰的方法不能被重写,修饰的成员变量只能为常量。
  • 继承的子类要重写这个抽象方法,会出现矛盾

static

  • static修饰后可以直接 类名. 调用方法,但是抽象方法没有实现体,调用无意义

接口 interface

  • 接口就是一种公共的规范标准,只要符合,即可通用
  • java中的接口更多地体现在对行为的抽象

1.接口的特点

  • 接口用关键字 interface 修饰
    • public interface 接口名{}
  • 类实现接口用 implements 接口名{}
    • public class 类名 implements 接口名{}
  • 接口不能实例化
    • 参照多态的方式,通过实现类对象实例化,这叫接口多态
    • 多态的前提:
      • 有继承/实现关系
      • 有方法重写
      • 有父(类/接口)引用指向(子/实现)类对象
  • 接口的实现类
    • 要么重写接口中的所有抽象方法
    • 要么是抽象类

2.接口的成员特点

  • 成员变量
    • 只能是自定义常量(默认是常量)
    • 默认修饰符: public static final
  • 构造方法
    • 接口没有构造方法,因为接口主要是对行为进行抽象的,没有具体存在
    • 一个类中没有父类,默认继承Object 类
  • 成员方法
    • 只能是抽象方法 (JDK 1.7前)
    • 默认修饰符: public abstract

3.接口和类的关系

类和类的关系

  • 继承关系,只能单继承,不可以多继承;可以多层继承,不可以循环继承

类和接口的关系

  • 实现关系,可以单实现,也可以多实现,还可以在继承一个类的同时实现多个接口

  • class A implements B,C{

    }

接口和接口的关系

  • 继承关系,可以单继承,也可以多继承

4.抽象类和接口的区别

  • 成员区别
    • 抽象类
      • 变量,常量;构造方法;有抽象方法,也有非抽象方法
    • 接口
      • 常量;抽象方法
  • 关系区别
    • 类与类
      • 继承、单继承
    • 类与接口
      • 实现、可以单实现、也可以多实现
    • 接口与接口
      • 继承、单继承、多继承
  • 设计理念区别
    • 抽象类
      • 对类抽象,包括属性、行为
      • 抽象类与子类存在 “is a” 的关系,让子类继承抽象类
    • 接口
      • 对行为抽象、主要是行为
      • 接口与子类存在 “like” 的关系,让子类实现接口

  • 接口就是类,所以Object就是接口超类?
    • 接口根本就不是类,接口是接口,类是类
    • 接口、抽象类、类都能生成 .class 文件
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值