• 面向对象重写理解 求值策略 -共享对象调用 面向对象原则


    面向对象和面向过程

    面向过程,自顶向下实现逻辑,一般先写一个方法,方法里使用ifelse/for等解决问题,几个排序算法都属于这类。

    面向对象,面向对象是对于业务高度抽象,对于每个步骤进行抽象,形成对象,对象的调用和组合来解决问题。

    也就是说,对象对象编程是吧熟悉和行为封装再对象上,基于对象的能力(方法)来解决问题。冰箱装象问题,人,冰箱,象,人有方法移动(物品),打开(物品),冰箱有方法开门关门。

    面向对象:占用资源相对高,速度相对慢。 面向过程:占用资源相对低,速度相对快。

    面向对象三个特征和五个原则

    类和对象的关系,对象是实体的抽象,类是对象的抽象。对象是类的实例,类是对象的模板。

    1.封装,封装是对于类和对象来说的,为对象的内部数据提供不不同级别的防护

    2.继承,使用现有对象的所有能力,继承接口和继承类,

    3.多态,类再相同方法不同情况的展现,是同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果。

    重写和重载,重写是子类重写父类实现的,父类的会被覆盖,重载是一个类一个方法不同参数

    重写就是多态最好体现,在运行时多态, 重载一般被叫做静态重载,编译时多态,个人不认为是多态

         class Dog {
                public void bark() {
                    System.out.println("woof ");
                }
            }
            class Hound extends Dog {
                public void sniff() {
                    System.out.println("sniff ");
                }
    
                public void bark() {
                    System.out.println("bowl");
                }
            }
            public class OverridingTest {
                public static void main(String[] args) {
                    Dog dog = new Hound();
                    dog.bark();
                }
            }
    输出结果是 bowl
        
        上面的例子中,dog 对象被定义为 Dog 类型。在编译期,编译器会检查Dog类中是否有可访问的 bark()方法,只要其中包含 bark()方法,那么就可以编译通过。在运行期,Hound 对象被 new 出来,并赋值给 dog 变量,这时,JVM 是明确的知道dog 变量指向的其实是 Hound 对象的引用。所以,当 dog 调用 bark()方法的时候,就会调用Hound类中定义的 bark()方法。这就是所谓的动态多态性。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    一. single responsibility princeple 类的职责单一

    二. open close priciple 核心是面向抽象编程,不对具体,类依赖于抽象,因此不修改类,通过继承和多态扩展方法所以是开发

    三. liskov substitution priciple 子类能替换父类,也是面向接口编程,保证扩展性和多态

    四. dependecy inversion principle 依赖抽象不依赖具体,接口和实现分离

    五. interface segregation principle 多个小接口,不要一个大接口,使用接口多继承分离

    ARTHUR J.RIEL 在那边《OOD 启示录》中所说的:“你并不必严格遵守这些原则,违背它们也不会被处以宗教刑罚。但你应当把这些原则看做警铃,若违背了其中的一条,那么警铃就会响起。

    平台无关性;

    Java 语言规范 O 通过规定 Java 语言中基本数据类型的取值范围和行为

    Class 文件 O 所有 Java 文件要编译成统一的 Class 文件

    Java 虚拟机 O 通过 Java 虚拟机将 Class 文件转成对应平台的二进制文件等

    Java 的平台无关性是建立在 Java 虚拟机的平台有关性基础之上的,是因为Java虚拟机屏蔽了底层操作系统和硬件的差异。

    形参和实参

    public static void main(String[] args) {
    ParamTest pt = new ParamTest();
    pt.sout("Hollis");//实际参数为 Hollis
    }
    public void sout(String name) { //形式参数为 name
    System.out.println(name);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    求值策略

    • 传值调用(值传递) 在传值调用中,实际参数先被求值,然后其值通过复制,被传递给被调函数的形式参数。因为形式参数拿到的只是一个"局部拷贝",所以如果在被调函数中改变了形式参数的值,并不会改变实际参数的值。
    • 传引用调用(引用传递) 在传引用调用中,传递给函数的是它的实际参数的隐式引用而不是实参的拷贝。因为传递的是引用,所以,如果在被调函数中改变了形式参数的值,改变对于调用者来说是可见的。
    • 传共享对象调用(共享对象传递) 传共享对象调用中,先获取到实际参数的地址,然后将其复制,并把该地址的拷贝传递给被调函数的形式参数。因为参数的地址都指向同一个对象,所以我们也称之为" 传共享对象",所以,如果在被调函数中改变了形式参数的值,调用者是可以看到这种变化的。

    java是共享对象传递传递的是引用赋值后的值,传递的是一个值,所以说java只有值传递

  • 相关阅读:
    【Vue 开发实战】基础篇 # 3:Vue组件的核心概念:事件
    nodejs项目实例拼车租车平台
    秒级使网站变灰,不改代码不上线,如何做到?
    做网赚的核心是:流量思维+变现思维
    adb 获取当前界面元素
    OCCT v11.0.16 x64 电脑硬件检测烤鸡软件中文
    svn提交规范
    vue面试如何准备,这几道面试题助力你拿到理想offer
    力扣今日题-535. TinyURL 的加密与解密
    docker-java 用Java操作docker创建容器并运行运行容器
  • 原文地址:https://blog.csdn.net/weixin_50224527/article/details/126491486