Java面向对象三大特性

本BLOG上原创文章未经本人许可,不得用于商业用途。转载请注明出处,否则保留追究法律责任的权利。

一、封装

  • 基本概念:

    封装是指一种将抽象性函式接口的实现细节部分包装、隐藏起来的方法。

    封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问。

    要访问该类的代码和数据,必须通过严格的接口控制。

    封装最主要的功能在于我们能修改自己的实现代码,而不用修改那些调用我们代码的程序片段。

    适当的封装可以让程式码更容易理解与维护,也加强了程式码的安全性。

    通常情况下,测试类可以对封装类的成员变量进行赋值,但当赋值的数据合法但不符合实际时,无论在编译阶段还是运行阶段都不会报错或提示,为了避免上述错误发生,就需要对成员变量进行密封包装处理,即封装。

    封装就是一种保证成员变量赋值合理性的机制。

  • 优点:

    1. 良好的封装能够减少耦合。
    2. 类内部的结构可以自由修改。
    3. 可以对成员变量进行更精确的控制。
    4. 隐藏信息,实现细节。
  • 封装的具体实现步骤:

    1. 私有化成员变量,确保外部的调用者无法直接赋值,使用private关键字修饰。

      private表示私有含义,修饰的成员变量只能在本类内部使用。

      private String name;
      private int age;
      
    2. 提供公有的get和set方法,并在方法中进行合理值的判断。

      public表示公有含义,修饰的方法可以在任意位置调用。

      public void setAge(int age) {
      		if (age > 0) {	//年龄合理化判断
      			this.age = age;
      		}else {
      			System.out.println("年龄不合理");
      		}
      	}
      
      1. 在构造方法中调用set方法进行合理值的判断
      public People(String name, int age) {
      		//this.name = name;
      		//this.age = age;
      		setName(name);
      		setAge(age);
      	}
      

二、继承

  • 基本概念:

    当多个类之间有相同的特征和行为时,可以将相同的内容提取出来组成一个公共类,让对多个类吸收公共类中已有特征和行为而在多个类的内部编写自己独有特征和行为的机制,叫做继承。

  • 优点:可以提高代码的复用性和拓展性以及可维护性。

  • 缺点:提高了类之间的耦合性(耦合度高就会造成代码之间的联系越紧密,代码独立性越差)。

  • 在Java中使用extend(扩展)关键字来表达继承关系。

    代码示例

    public class Student extends Person {} // 表示Student类继承Person类
    //其中Person类叫做基类、父类、超类
    //Student类叫做派生类、子类、孩子类
    
  • 注意:

    1. 子类可以继承父类的成员变量和成员方法,其中私有成员变量可以继承但不可以直接使用,不可以继承构造方法和私有方法。
    2. 无论使用何种方式构造子类对象时,都会自动调用父类中的无参构造方法来初始化从父类中继承下来的成员变量,相当于在子类构造方法第一行增加代码:super()的效果。
    3. 使用继承必须满足 子类 is a 父类 的逻辑关系,也就是不能滥用继承。
    4. Java中只支持单继承不支持多继承。

三、多态

  • 基本概念

    多态主要指同一事物表现出的多种形态。

  • 语法格式

    父类类型 引用变量名 = new 子类类型();

    代码示例:

    Person worker = new Worker();
    worker.show();
    

    解析:在编译阶段调用Person类中的show方法,在运行阶段调用Worker类中重写以后的show方法。

  • 多态的效果:

    1. 当父类的引用指向子类的对象时,父类的引用可以直接调用父类独有的方法;
    2. 当父类的引用指向子类的对象时,父类的引用不可以直接调用子类独有的方法;
    3. 对于父子类都有的非静态成员方法来说,编译阶段用父类版本,运行阶段调用子类重写后的版本;
    4. 对于父子类都有的静态方法来说,编译和运行姐u的那调用父类版本,隶属于类层级,因此与指向的对象无关。
  • 优点

    1. 消除类型之间的耦合关系
    2. 可替换性
    3. 可扩充性
    4. 接口性
    5. 灵活性
    6. 简化性
  • 多态存在的三个必要条件

    1. 继承
    2. 重写
    3. 父类引用指向子类对象:Parent p = new Child();
  • 多态实现的方式

    方式一:重写
    方式二:接口
    方式三:抽象类和抽象方法

  • 多态的意义

    在于可以屏蔽不同子类的差异性实现通用的编程,但可以调用不同的方法带来不同的结果

  • 多态的使用场合

  1. 通过方法的参数传递形成多态

    public static void draw(Shape s){}	//测试类中自定义的成员方法
    TestShape.draw(new Rect(1,2,3,4));	//main函数中调用成员方法并传入创建的形参子类对象
    
  2. 在方法体中直接使用多态的语法格式

    TestAbstract ta = new SubTestAbstract();
    
  3. 通过方法的返回值类型,即返回子类的对象形成多态。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值