zoukankan      html  css  js  c++  java
  • 面向对象中一些容易混淆的概念

    静态变量和成员变量的区别

    * 静态变量也叫类变量  成员变量也叫对象变量

    * A:所属不同

                    * 静态变量属于类,所以也称为为类变量

                    * 成员变量属于对象,所以也称为实例变量(对象变量)

    * B:内存中位置不同

                    * 静态变量存储于方法区的静态区

                    * 成员变量存储于堆内存

    * C:内存出现时间不同

                    * 静态变量随着类的加载而加载,随着类的消失而消失

                    * 成员变量随着对象的创建而存在,随着对象的消失而消失

    * D:调用不同

                    * 静态变量可以通过类名调用,也可以通过对象调用

                    * 成员变量只能通过对象名调用

    A:this和super都代表什么

                    * this: 代表当前对象的引用,谁来调用我,我就代表谁

                    * super:代表当前对象父类的引用

    B:this和super的使用区别

                    * a:调用成员变量

                                    * this.成员变量 调用本类的成员变量,也可以调用父类的成员变量(本类中没有的情况下)

                                    * super.成员变量 调用父类的成员变量

                    * b:调用构造方法

                                    * this(...)              调用本类的构造方法

                                    * super(...)         调用父类的构造方法

                    * c:调用成员方法

                                    * this.成员方法 调用本类的成员方法,也可以调用父类的方法(本类中没有的情况下)

                                    * super.成员方法 调用父类的成员方法

    父类没有无参构造方法,子类怎么办?

                    * super解决

                    * this解决

    注意事项

                    * super(…)或者this(….)必须出现在构造方法的第一条语句上(也就是只能存在一个)

    public Student(){

                    super(name,age);

    }

    public Student(){

                    this(name,age);

    }

    Override和Overload的区别?

                    * 方法重写:子类中出现了和父类中方法声明一模一样的方法。与返回值类型有关,返回值是一致(或者是子父类)的

                   

                    * 方法重载:本类中出现的方法名一样,参数列表不同的方法。与返回值类型无关。

              

    抽象类的成员特点
        * a:成员变量:既可以是变量,也可以是常量。abstract是否可以修饰成员变量?不能修饰成员变量
        * b:是否有构造方法:有
            * 用于子类访问父类数据的初始化。
        * c:成员方法:既可以是抽象的,也可以是非抽象的。

    抽象类的成员方法特性:
        * a:抽象方法 强制要求子类做的事情(如果有子类,强制子类重写)
        * b:非抽象方法 子类继承的事情,提高代码复用性(如果有子类,直接继承使用即可)

    接口成员特点(接口都是暴露的原则,所以它的成员都是public的)

                    * 成员变量:只能是常量,并且是静态的并公共的

                                                      * 默认修饰符:public static final

                                                      * 建议:自己手动给出

                    * 构造方法:接口没有构造方法

                    * 成员方法:只能是抽象方法。

                                                        * 默认修饰符:public abstract

                                                        * 建议:自己手动给出

    :类与类,类与接口,接口与接口的关系(前后一致就是继承;不一致就实现)

                    * a:类与类

                                    * 继承关系,只能是单继承,可以多层继承

                    * b:类与接口:

                                    * 实现关系,可以单实现,也可以多实现。(因为没有方法体,可以多实现且没有安全隐患)

                                    * 并且还可以在继承一个类的同时实现多个接口(~接口的出现打破了单继承的局限性)

                    * c:接口与接口:

                                    * 继承关系,可以单继承,也可以多继承。

    成员区别
        * 抽象类(和普通类相比,只是可以多定义了抽象方法而已)
            * 成员变量:可以变量,也可以常量
            * 构造方法:有
            * 成员方法:可以抽象,也可以非抽象
        * 接口:
            * 成员变量:只可以常量
            * 构造方法:无
            * 成员方法:只可以抽象
    关系区别
        * 类与类
            * 继承,单继承,多层继承
        * 类与接口:
            * 实现,单实现,多实现
        * 接口与接口多继承
            * 继承,单继承

  • 相关阅读:
    动态规划_leetcode70
    动态规划_leetcode64
    动态规划_leetcode63
    PHP处理base64编码字符串
    PHP解决h5页面跨域
    PHP对象转数组
    jQuery 正则
    mysql重置密码
    yii框架学习(获取插入后的id)
    nginx 之 root和alias
  • 原文地址:https://www.cnblogs.com/houjx/p/9388401.html
Copyright © 2011-2022 走看看