封装,继承

本文探讨了面向对象编程中的封装和继承概念。封装通过private关键字实现属性私有化,并提供getter/setter方法进行访问控制。继承允许子类扩展父类功能,包括方法重写、toString()方法、super和this关键字的使用,以及构造方法的特点。同时,文章还介绍了final关键字的应用和基本类型的包装类,包括自动装箱和拆箱以及与字符串之间的转换。

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

1、封装

    概念:  隐藏 对象 属性和实现细节 ,仅对外公开 接口 (方法/函数),控制在程序中 属性的读和修改访问级别; 属性数据和函数都是类的成员。
    目的: 增强安全性和简化编程
       广义:一切公共代码的抽取都可以叫封装。 一般体现在公共方法的封装。工具类。(public)
    狭义: 隐藏对象的属性和实现细节。
  1. 将属性私有化 ,使用private关键字修饰。
  2. 为使用private关键字修饰的属性添加 get和set方法。通过get和set方法来操作属性。
  3. 在setter方法中添加逻辑校验,保证数据的有效性。
                        定义公有方法(setter,getter),用于访问属性
                        setter:用于设置对象属性的值
                        getter:用于获取对象属性的值

2、继承(inherited)

    概念: 与 多态封装共为 面向对象的三个基本特征
                      可以使子类具有父类的 非私有 属性方法或者重新定义、追加属性和方法等。
      特点: 提升代码的可重用性: 子类通过继承可以得到父类有的内容
                    能够扩展功能: 通过继承子类可以扩展父类已有的功能
                    方便维护: 多个子类都继承了父类的某个功能,当功能需要修改时,只需修改父类此功能
      格式: [权限修饰符] class 子类名 extends 父类名{}
                 java语言是单继承的,java类只能由一个父类。
                

    2.1    方法重写

         概念:子类不想原封不动地 继承父类的方法,而是想作一定的修改,这就需要采用方法的重写。方法重写又称 方法覆盖
                                        
     方法重写方法重载的区别:
            重载(overload):发生在同一个类中 , 方法名相同,参数列表不同,不考虑返回值。
            重写(override):发生在父子类中,子类继承父类的方法,方法名相同,参数也相同,但是实现方法体不同。
    注意:
  • 必须保证父子类中重写的方法,方法名相同,参数列表相同。
  • 子类方法的返回值小于等于父类方法的返回值范围。
  • 子类方法的权限必须要大于等于父类方法的权限(不包括 private)。
  • 子类重写方法异常声明必须是父类的异常或子级异常
  • 私有的不能被继承(继承父类非私有的属性和非私有的方法)

    2.2    toString()方法

         任何类都是Object类的直接子类或者间接子类,在Object类中有一个toString()方法。
               当输出一个对象时,先调用 当前类的toString()方法,如果当前类没有toString() ,就去找当前类的 父类,看是否有toString()方法,如果过父类也没有,就去找 Object类中的toString()方法并运行。

   2.3    super关键字,this关键字

         子类既想用自己的方法,又想用父类的成员变量和成员方法,需要通过super关键字。
    用法:
  1. 在子类的成员方法中访问父类的成员变量和成员方法。
  2. 在子类的构造方法中访问父类的构造方法。

    2.4    Object类

         Object是所有类的父类,任何类都默认继承Object
         由于所有的类都继承在Object类,因此省略了extends Object关键字。 
                该类中主要有以下方法: toString(),getClass(),equals(),clone(),finalize(),
 其中toString(),getClass(),equals()是其中最重要的方法。
    extends:表示两个类之间有继承关系(子类继承父类)。子类可以用父类非私有的属性的方法
    注意
        Object类中的getClass(),notify(),notifyAll(),wait()等方法被定义为final类型,因此不能重写。
        equals()方法 在比较字符串时 比较的是俩个字符串的值。但是 实际上equals方法比较的是地址值
    为什么String就可以用equals()比较值呢
        因为String类中重写了equals()方法,所以可以比较值。

    2.5     继承中构造方法的特点(父子类)

    特点
  • 构造方法不能被继承(构造方法是一个类独有的方法)
  • 创建子类对象一定是先调用父类构造,再调用子类构造。(并且 只有子类构造才能调用父类构造)。
  • 子类构造可以通过super关键字调用父类有参构造 无参super() 有参super(参数列表) 。
  • super父类构造调用,必须是子类构造中的第一行语句。(并且 一个子类构造,只能调用一次super())。 必须先有父再有子。
    
    

总结:

  1. 继承关键字:extends
  2. 单继承,一个类只能有一个直接父类
  3. 子类可以继承父类:public protected 同包默认的属性和方法,不能继承private私有方法
  4. 子类可以书写自己的属性和方法
  5. 子类可以重写父类的方法
  6. 在子类中可以通过super调用父类的方法和属性。super.方法名/属性名
无父无子
a. 父类构造不能继承,但是必须调用
b. new子类的时候,子类构造的 第一行必须调用父类的构造方法
c.如果子类不写super(),系统默认调用父类无参构造
d.可以通过super(参数)调用有参,并且必须第一行,并且只能有一个super()。
如果通过子类调用方法,优先调用自己的方法。子类重写方法之后调用自己的方法,如果子类没有重写方法则使用父类的方法。
  1. 先子类---》再父类---》再父类--》。。。。--》Object
  1. 所有类都直接或者间接的继承了Object类。Object是所有类的基类,超类。

继承的作用:

A. 减少代码冗余

B. 书写一个父类,子类可以对父类进行扩展

C. 子类可以对父类重新定义

3.finnal关键字

final 代表最终的,不可改变的。
字符串为什么是不可变的?因为String类是用final关键字修饰的。
三种用法:
  • 可以用来修饰类
final修饰的类不能被继承,也就意味着这个类其中的方法不能被重写。
  • 可以用来修饰方法
final关键字修饰的方法不能被覆盖重写。表示一个最终的方法。
  • 可以用来修饰变量
final修饰成员变量---》常量 命名必须全大写 一般多个单词使用下划线连接D_AGE,CAT_AGE, PI
基本数据类型:使用final修饰的基本数据类型值不能变,并且只能被赋值一次。
引用数据类型:使用final修饰的引用类型,引用的地址值不能改变,但是对象的属性值可以改变。
  • 对于成员变量来说,使用final 修饰照样是不可变的,但是因为成员变量有默认值,所以必须手动赋值。
  • 对final修饰的成员变量来说,可以直接赋值,也可以通过构造方法赋值,但是必须二选一。
  • 如果要通过构造方法赋值,并且类中有多个构造方法,必须保证每一个构造方法都要对final修饰的成员变量赋值。

4.基本类型的包装类

4.1、基本数据类型和对应的包装类:

byte Byte
short Short
int Integer
long Long
float Float
double Double
char Character
boolean Boolean

4.2、自动装箱与自动拆箱

  • 装箱: 基本数据类型转换成包装类
  • 拆箱: 包装类转换成基本数据类型

4.3、 基本数据类型与字符串之间的转换

  • 基本类型(数字)----》字符串(String)
  1. 可以使用数字直接+空字符串
            例如: String a = 5 + "";
       2.使用Integer包装类的方法 toString(int i);
            例如: String a = Integer.toString(100);
       3.使用String类的方法valueOf(int i)
            例如:String a = String.valueOf(100);
  • 字符串----》基本数据类型(数字)
注意:只有数字类型的字符串,才可以转换成数字
使用包装类的方法xxx.parseXXX("5"); NumberFormatException 数字格式异常
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值