七、面向对象二——继承与抽象类

一、类间访问

1.1 package包介绍

包概述

  • 包本质上就是文件夹
  • 当在IDEA中创建多级包时,通常适用.进行分割
  • 包的命名一般为公司域名去掉www后的翻转,例如com.xu.xxx,且字母都为小写
  • 合理的分包可以便于我们后期对代码的管理
  • 在IDEA的包下创建类后,会自动在第一行生成package语句,若使用记事本则必须手写

1.2 包的注意事项

  • package语句必须是程序的第一条可执行代码,即其余代码不可以写在package语句的上面,否则报错
  • 每个java文件中只能拥有一条package语句,若无包名,则可以没有package语句

1.3 类间的访问

  • 若在同一个包下,则可以直接用类名的方式使用对应类
  • 若在不同包下,则有两种方式访问
    • 使用import关键字进行导包
      • 相当于把其他包中的类导入本地的命名空间中,导入后可以直接使用类
      • 此方法可用于绝大部分情况
      • import关键字必须在package关键字下,class关键字之上
    • 通过全类名的方式访问
      • 全类名即包名+类名
      • 此方法可以使用在多个包下出现了相同类名的类,导入操作会导致同一命名空间下的标识符重名;此时就可以使用全类名的方式调用

二、static关键字与代码块

2.1 static关键字介绍

  • static是java的一个修饰符,英文译为静止的,静态的。可以修饰成员方法和成员变量

    • 被static修饰的成员变量,一般叫做静态变量

    • 被static修饰的成员方法,一般叫做静态方法

2.2 static修饰的特点

其特点是决定是否使用static关键字进行修饰的判断依据:即是否优先于对象加载且需要被所有对象共享可以直接通过类名使用而不需要创建对象

具体特点如下:

  1. 被static修饰的成员(变量和方法),会被该类的所有对象共享
  2. 随着类的加载而加载,优先于对象存在。(对象需要类加载后,才能创建)
  3. 既可以通过**类名.**的方式调用,也可以通过对象名.的方式调用

2.3 static关键字注意事项

  • 静态方法只能访问静态的成员
    • 因为静态方法优先于对象存在,即优先于其他非静态成员存在
    • 而非静态成员只有在对象创建后,才可以进行使用
  • 非静态方法可以访问静态成员,也可以访问非静态的成员
  • 静态方法中是没有this关键字
    • 因为static优先于对象加载,而this代表了当前对象的引用

2.4 代码块概述

在java中,使用{}包裹住的代码被称为代码块,共分为3种:

  • 局部代码块(就是方法中的内容)
    • 位置:方法中定义
    • 作用:限定变量的生命周期,及早释放,提高内存利用率
  • 构造代码块(构造对象前会执行的语句)
    • 位置:类中方法外定义
    • 特点:每次构造方法执行的时候,都会执行该代码块中的代码,并且在构造方法执行前执行
    • 作用:将多个构造方法中相同的代码,抽取到构造代码块中,提高代码的复用性
  • 静态代码块(可用于提前初始化一些数据)
    • 位置:类中方法外定义
    • 特点:需要通过static关键词修饰,随着类的加载而加载,并且只执行一次
    • 作用:在类加载的时候做一些数据初始化的操纵

三、继承

3.1 继承概述

继承:让类与类之间产生关系(子父类关系),子类可以直接使用父类中非私有的成员

  • 注:若子类和父类不在同一个包中,则默认权限修饰符下的成员也无法使用(详情见3.7 权限修饰符)

3.2 继承的原理

  1. 子类中所有的构造方法默认都会访问父类中无参的构造方法

    • 子类在初始化的时候,有可能会使用到父类中的数据,如果父类没有完成初始化,子类将无法使用父类的数据。所以子类初始化之前,一定要完成父类初始化,但这并不意味着创建了父类对象

    • 如何完成父类初始化?所有构造方法的第一条语句默认都是:super()(见3.6 方法重写),即调用父类中的无参构造方法完成父类的初始化

    注:如果我们编写的类,即使没有手动指定父类,系统也会自动继承Obj

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
面向对象的编程中,C语言并不直接支持类和抽象的概念。引用中提到,final关键字用来修饰方法,表示该方法不能在子类中被覆盖。而abstract关键字用来修饰抽象方法,表示该方法必须在子类中被实现。然而,在C语言中,没有对应的关键字来实现类和抽象的概念。 相反,C语言通过结构体来模拟类的概念。结构体是一种用户自定义的数据类型,可以包含多个不同类型的数据成员。通过结构体,我们可以将相关的数据和功能组合在一起。然而,C语言中的结构体不支持继承和多态等面向对象的特性。 在C语言中,我们可以使用函数指针来模拟抽象类和接口的概念。函数指针可以指向不同的函数,通过使用函数指针,我们可以实现多态性,即在运行时根据函数指针指向的具体函数来执行不同的操作。 综上所述,C语言并不直接支持面向对象中的类和抽象的概念,但可以使用结构体和函数指针来实现类似的功能。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [面向对象——类和对象](https://blog.csdn.net/shouyeren_st/article/details/126210622)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [面向对象编程原则(06)——依赖倒转原则](https://blog.csdn.net/lfdfhl/article/details/126673771)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值