• 三、OO三大特性


    三、OO三大特性

    封装、继承、多态

    • 封装:类的概念,把属性和方法包装到一个程序单元中,进行了一定信息隐藏(setter/getter)
    • 继承:类的父子关系,子类可以继承父类的属性和方法,也可以重写扩展(父类私有无法继承)
      • 数量:只能单继承
      • 好处:复用性、节省代码
      • 注意:继承于抽象类的子类中,必须重写(实现)抽象方法
    • 多态:不同类对象对同一消息做出的反应
      • 对外一种表现形式 对内多种具体实现
      • 重写和重载也算多态(重写:运行期;重载:编译期)
      • 通常通过抽象类、接口实现多态

    1、封装(类)

    1、访问修饰符

    1. public
      1. 都可访问
    2. private
      1. 只有该类内部可访问
    3. protected
      1. 该类及其子类可访问,同一个包下的类也可访问
    4. 默认
      1. 同一个包内的类可访问
    位置publicprotected默认private
    同一个类YYYY
    同一个包下的类YYYN
    不同包子类YYNN
    不同包无关类YNNN

    2、this

    这里只提一个小点:构造方法调 其他构造必须放第一行

    class A {
       public A(){}
       public A(Object o){
           this(); // 必须放第一行!!!
           // ...
       }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    2、抽象类 abstract

    • 抽象:把多个事务的共性抽取出来

      • 比如十二生肖的共性就是它们都是动物,宏观概念上动物有的特性十二生肖都有
    • 抽象类:Java可以定义没有方法体的方法,该方法由其子类继承并具体实现,该方法我们称之为抽象方法,含有抽象方法的类被称为抽象类

      • 属性:没要求

      • 方法:静态、非静态都可以,可以有也可以没有抽象方法(修饰符:abstract,没有方法体)

      • 构造方法:有(但是不能实例化,为子类实例化)

      • 继承:单继承(必须重写抽象方法)

      • 注意:有抽象方法的类必须是抽象类,抽象类不一定有抽象方法

      • 栗子

        • // 抽象类必须由abstract修饰
          abstract class 抽象类{
              public int num;
          
              public 抽象类() {
                  // 虽然我有构造器,但是依然不能实例化
              }
          
              // 抽象方法必须由abstract修饰
              public abstract int getNumAddOne();
          }
          
          • 1
          • 2
          • 3
          • 4
          • 5
          • 6
          • 7
          • 8
          • 9
          • 10
          • 11

    3、接口 interface

    • 概念:定义了一种规范

    • 好处:

      • 多实现(implements,一个类虽然只能继承一个父类,但是可以实现多个父接口)

        • interface A{}
          interface B{}
          interface C{}
          class E{}
          class F extends E implements A,B,C{}
          
          • 1
          • 2
          • 3
          • 4
          • 5
      • 多继承extends,一个接口可以继承多个接口,没错,多继承!)

        • interface A{}
          interface B{}
          interface C extends A,B{ }
          
          • 1
          • 2
          • 3
    • 注意:实现接口,必须重写抽象方法( jdk1.8接口可定义静态方法 )

    • 作用:解耦(降低程序间的依赖关系)高内聚低耦合

    • 特点

      • 属性:只能定义公开静态常量(public static final;不写的话默认也是这个)
      • 方法:公开抽象方法(public abstract;不写的话默认也是这个)、静态方法(jdk1.8+)
    • 栗子

      • public interface 接口 {
            // 接口属性只能用 public static final 修饰
            public static final double LENGTH = 2;
            // 默认也是 public static final
            double WIDTH = 0.1;
            // 接口方法全是抽象方法
            public abstract void charge();
            // 默认也是 public abstract
            void read();
        }
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7
        • 8
        • 9
        • 10

    4、抽象类和接口

    接口抽象类
    继承多继承,多实现单继承
    属性常量(public static final)都可以
    方法抽象(public abstract)/静态(jdk1.8)都可以(有抽象方法的类一定是抽象类)
    构造有(不能实例化,为子类实例化)
    关系like-ais-a
    思想不考虑事物的相关性
    只是一种规范
    用于一组相关的事物
    总不能让狗继承抽象花吧
    二者完全没有相关性
  • 相关阅读:
    C++核心编程——4.5 运算符重载
    软件工程师,全面思考问题很重要
    MySQL 三大日志(bin log、redo log、undo log)
    搭建JMeter+Grafana+influxdb性能测试监控平台
    记一次 .NET某家装ERP系统 内存暴涨分析
    华为云云耀云服务器L实例评测|基于云服务器的minio部署手册
    Web系统常见安全漏洞介绍及解决方案-sql注入
    【STM32】Cortex_M4 GPIO口概述知识总结
    [附源码]计算机毕业设计JAVAjsp社区养老服务管理系统
    深入理解JVM虚拟机第四篇:一些常用的JVM虚拟机
  • 原文地址:https://blog.csdn.net/qq_30769437/article/details/126650520