Java基础知识:面向对象-封装、继承、多态

本文介绍了面向对象编程的三大核心概念:封装、继承和多态。详细解释了this和static关键字的作用及用法,并探讨了继承机制及其重写规则,最后讨论了多态的概念及其在程序扩展性上的优势。

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

面向对象—封装、继承、多态


一、封装

1.1 原则

  • 把不需要对外提供访问的内容都隐藏起来,仅对外提供公共访问方法

1.2 this关键字

  • 作用

    • 代表自身类的对象
    • 在自身构造方法内部引用其他构造方法
    • 引用成员变量
    • 引用成员函数
  • 构造函数间的调用

    • this.xx 调用的是成员的属性和成员方法
    • this(xx) 调用的是本类中的对应参数的构造函数
  • this语句:用于构造函数间相互调用。只能定义在构造函数第一行。因为初始化要先执行

  • 非静态,不能再静态方法内部使用

1.3 static关键字

  • Static:静态
  • 用法:是一个修饰符,用于修饰成员(成员常量,成员变量,成员函数),当成员被静态修饰后就多了一个调用方法,除了可以被对象调用外,还可以直接被类名调用,所以static修饰的变量也叫类变量。类名.静态成员
  • 特点
    • 随着类的加载而加载
    • 优先于对象存在
    • 被所有对象共享
    • 可以直接被类调用
  • 实例变量和类变量的区别
    • 存放位置
      • 类变量随着类的加载而存在于方法区中
      • 实例变量随着对象的建立而存在于堆内存中
    • 生命周期
      • 类变量生命周期最长,随着类的消失而消失
      • 实例变量随着对象的消失而消失
  • 静态使用注意事项

    • 静态方法只能访问静态成员。非静态方法都可以访问
    • 静态方法不可以定义this、super,因为静态优先于对象存在
    • static关键字不能修饰成员方法或构造方法内部的变量
    • 主函数是静态的
  • 静态利弊

    • 利:节省内存空间
    • 弊:生命周期过长,访问出现局部性(只能访问静态)

1.4 主函数main

  • 格式

    public static void main(String[] args){}
    
  • public:代表该函数访问权限最大
  • static:代表主函数随着类的加载就已经存在
  • void:主函数没有具体返回值
  • main:不是关键字,但可以被虚拟机识别
  • (String [] args):函数的参数。参数类型是一个数组,该数组元素是字符串。即字符串类型的数组

  • 主函数是固定格式的,因为要被JVM识别,JVM调用主函数时,传入的是new String[0]

1.5 静态代码块

  • 特点:随着类的加载而执行,只执行一次,用于给类初始化
  • 格式

    static{
        执行语句;
    }
    


二、继承

2.1 继承说明

  • 作用
    • 提高代码的复用性
    • 让类与类之间产生了关系,有了这个关系才有了多态的特性
  • 说明
    • 子类拥有父类的所有属性
    • 子类拥有父类的所有方法
    • 子类不可拥有父类的构造方法
    • 子类类型是父类类型
  • Java语言中只支持单继承,不支持多继承

2.2 重写(覆盖)

  • 当子类有和父类一模一样的函数,且子类调用该函数时,系统会执行子类函数的内容
  • 子类重写父类,子类权限必须大于等于父类
  • 静态只能覆盖静态

  • 重载和重写的区别

    • 重载:只看同名函数的参数列表
    • 重写:子父类方法要相同(包括返回类型)
  • 子父类的构造函数

    • 子类的构造方法内部必须调用父类的构造方法,如果子类构造方法内部不写调用父类构造方法的代码时,系统会自动调用父类的默认构造方法。如果父类不存在默认构造方法时,则需手动使用super关键字进行调用
    • super():访问父类的默认构造函数,且子类所有构造函数的第一行都默认super()。子类的构造函数默认第一行有一条隐式语句super()
  • 子类的构造过程

    • 首先构造父类的属性和方法(属性在方法前初始化)
    • 其次构造子类的属性和方法(属性在方法前初始化)

2.3 super关键字

  • 作用
    • 在子类构造方法内部引用父类构造方法
    • 在子类中调用父类的成员方法
    • 在子类中调用父类的成员变量
  • 非静态,不能再静态方法内部使用

2.4 final关键字

  • 可以修饰类、变量、函数
  • final修饰的类不可以继承
  • final修饰的方法不可以复写
  • final修饰的变量是常量,常量名大写


三、多态

3.1 多态说明

  • 体现
    • 父类的引用指向了自己的子类对象
    • 父类的引用可以接收自己的子类对象
  • 前提:必须是类与类之间有前提,要么继承,要么实现
  • 好处:提高程序的扩展性

3.2 转型

  • 向上转型:Animal a = new Cat();
  • 向下转型:Cat c = (Cat)a; // 转的是父类引用

3.3 多态中成员的特点

  • 成员函数:在多态调用时,编译看左边,运行看右边
  • 成员变量:都参考左边(引用型变量所属的类),静态成员和函数都参考左边
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值