zoukankan      html  css  js  c++  java
  • 【Java】封装、继承、多态

     封装


    在面向对象程式设计方法中,封装(英语:Encapsulation)是指一种将抽象性函式接口的实现细节部分包装、隐藏起来的方法。

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

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

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

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

    封装的优点

    • 1. 良好的封装能够减少耦合。

    • 2. 类内部的结构可以自由修改。

    • 3. 可以对成员变量进行更精确的控制。

    • 4. 隐藏信息,实现细节。

    实现Java封装的步骤

    1. 修改属性的可见性来限制对属性的访问(一般限制为private),例如:

    public class Person {
        private String name;
        private int age;
    }
    View Code

    这段代码中,将 name 和 age 属性设置为私有的,只能本类才能访问,其他类都访问不了,如此就对信息进行了隐藏。

    2. 对每个值属性提供对外的公共方法访问,也就是创建一对赋取值方法,用于对私有属性的访问,例如:

    public class Person{
        private String name;
        private int age;
    ​
        public int getAge(){
          return age;
        }
    ​
        public String getName(){
          return name;
        }
    ​
        public void setAge(int age){
          this.age = age;
        }
    ​
        public void setName(String name){
          this.name = name;
        }
    }
    View Code

    Lombok简化封装的注解依赖

    https://www.cnblogs.com/heyonggang/p/8638374.html

    官网地址

    https://projectlombok.org/

     

    为什么需要封装?

    - 当属性可以被随意访问时,属性的数据限制只能基于规定的数据类型的数值范围所限制,除此之外没有别的限制了

    - 实际开发中,我们需要对属性的赋值增加额外的限制条件,具体的限制视情况而定

    - 这个限制就可以阻碍属性的直接访问,我们通过方法这个途径来对属性访问和限制

    - 避免直接访问属性,所以设置对属性的私有化权限 private

    JavaBean?

    - 概念: 是一个可重用组件 Component

    - 本质就是一个普通的类

    - 这个类必须public修饰

    - 必须提供无参构造

    - 属性必须是private且提供对应的setter & getter 方法

    - 作用于映射数据库中的表,建立实体关系

    - 或者映射表单,接受数据

    this关键字

    https://www.cnblogs.com/zheting/p/7751752.html

    - this 指代当前对象的引用

    - 表示任意一个本类创建出来的实例

    - 因为表示当前对象,所以能够访问成员方法,和成员变量,或者构造器

    - 如果要调用本类的方法或者属性,其实可以不用书写this.编译器默许这样的写法了

    - 但是参数和属性同名就像setter一样,或者是带参构造,要赋值给属性就必须声明this,表示是成员方法

    对象数组的操作使用

    https://blog.csdn.net/lxxiang1/article/details/82320720

    Import & Package

    https://www.cnblogs.com/colintz/p/10088166.html

    - import 导入指定包下的资源 类 抽象类、枚举类、接口

    - java.lang包下的资源默认导入,及不会显示,也不会报错

    - 调用同类名资源使用时,建议书写完整类名,也就是类的完全限定名

    - 通配符* 表示所有,使用*即表示导入所有资源

    静态导入

    https://www.cnblogs.com/EasonJim/p/7907660.html


    继承 Inheritic

    https://blog.csdn.net/wei_zhi/article/details/52780026

    - Java是单继承,多实现的 一个类只能继承一个类,但是可以实现多个接口

    - Java允许继承链

    - 只能继承一个类,但可以被多个类继承

    - 继承,可以提高代码复用, 但是也增加了耦合性 减少代码冗余

    - 必须符合 is a 的关系

    - 是多态实现的前提条件

    - 增强对象功能,扩展功能

    - class A extends B

    - A 继承 B, A是派生类 子类 subclass

    - B 是 A 的 父类、超类、基类、superclass

    - 父子类是相对的概念

    - 直接继承的类叫做直接父类

    - 继承链上的父类是间接父类

    - 子类继承父类后,拥有protected以上级别的属性和方法

    - Java并不是真正意义上的单继承,实际上,所有的类,包括我们自己创建的类,都有一个顶级类Object 直接或者间接的

    - 所有的类都具有Object的方法和属性

    基类,顶级类,Object:

    https://blog.csdn.net/qq_35029061/article/details/100220554

    重写Override

    https://blog.csdn.net/digua930126/article/details/90760387

    - 重写,也称为覆盖 子类继承父类之后,子类中对父类同名同参数的方法进行覆写

    - 创建子类实例,调用父类同名方法时,实际是执行子类重写父类的方法

    - 重写必须同名同参数

    - 可以注解为@Override 以标识

    - 子类重写的方法的权限访问必须大于等于父类方法,可见性必须扩大

    - static必须一一对应,父类static子类也必须static

    重载与重写的区别

    https://blog.csdn.net/qunqunstyle99/article/details/81007712

    super关键字:

    https://blog.csdn.net/sujudz/article/details/8034770

    - 表示为父类的

    - 调用 父类的属性、方法、构造器

    - 在子类中定义了同名属性时,要调用父类属性,必须显示声明super 表示为父类属性

    - 子类重写了父类方法,如果希望调用父类的方法,使用super.方法


    什么是多态?

    - 一个事物具有多种形态 

    - 对象的多态:子类实例被父类引用指向

    多态:

    https://blog.csdn.net/doncoder/article/details/83243906

    编译器,只能调用父类声明的方法,实际运行期,执行的是子类重写父类方法

    实现多态必须具有继承关系,或者是接口的实现,其次是方法的重写

    上下转型

    内存实际上是加载了子类特有的属性和方法,但是变量是父类类型引用,编译时只能调用父类的方法

    如何调用子类自己的方法? 向下转型,强制转换

    - 转型导致的异常即是类型不正确 ClassCastException

    https://blog.csdn.net/yuncaidaishu/article/details/88690799

    Instanceof的使用

    - 实例 instance 实例所属的类

    - 返回类型 布尔值 true false

    - 表示判断此对象是否是这个类创建的实例

    - JDK14 种 强化了 instanceof 的语法,当判断为true 时可直接强制接受对象

  • 相关阅读:
    所谓的飞扬档案管理软件
    通过实例学习Virtools脚本语言VSL 解析字符串
    SQLite FAQ中文版
    通过实例学习Virtools脚本语言VSL 将物体排列于圆周上
    通过实例学习Virtools脚本语言VSL 解二次方程
    out 和 ref
    ASP.NET MVC深度接触:ASP.NET MVC请求生命周期
    ICSharpCode.SharpZipLib 压缩
    aspnet_regiis.exe 详解
    ASP.NET 配置文件 configSource 的用法
  • 原文地址:https://www.cnblogs.com/mindzone/p/12711902.html
Copyright © 2011-2022 走看看