继承-权限-super-final-多态-组合

权限修饰符

    内容
        public
        protected
        default(不写就是它)
        private
    作用 : 
        修饰类    只可以 public default
        修饰方法
        修饰属性

父类的属性 方法 子类都能拿到吗  ?
    可以
    虽然有权限的限制 , 但是不妨碍子类继承到 , 只是子类继承到了之后 没有权限使用
    原因如下

父类 子类 构造器的执行顺序 

当 new 一个类时 , 会先创建其父类的对象 先执行其父类的构造器  默认调用无参构造器, 
    如果父类还有父类 , 那么先创建父类的父类 先执行父类的父类的构造器    直至 Object
    // 父类对象作为 子类对象的内部对象存在  
    
    因此 所有类最好有一个公共的无参构造器 
    因为 其子类对象创建时 会默认的调用它的无参构造器 (除非另行指明有参的构造器)

父类 子类内存图解

super 关键字

    super.属性名  这是主动向上追溯 , 使用父类的 属性   
                在子类和父类有同名属性时会这么用  
    super.方法名 这是主动向上追溯 ,使用父类的方法 
                在子类和父类有同名方法时会这么用            
    super([实参]) 这是引用父类构造器
        如果在子类的构造器中 不去显示引用父类构造器 , 那么默认引用无参构造器
        如果要引用有参的构造器  , 那么可以 super(实参) 来引用
        
        super 在构造器中 必须位于第一行   所以 super this 在构造器中不能共存

注意 :  super 不能出现在 static 成员里
父类 子类如果定义相同的属性  该如何  ?
    父类和子类可以相同的属性
    如果 子类类型存储子类对象  , 那么使用的是子类的属性
    如果 父类类型存储子类对象  , 那么使用的是父类的属性
    以上 称为 静态绑定   属性是静态绑定的 -> 你的类型是谁的  用的就是谁的  
    
    父类和子类有相同的属性  在子类中  , 优先使用子类的属性
    使用 super.属性名 可以使用父类的属性  
    调用父类的 get  set 方法 , 修改的父类的属性  
    继承中  父类无法得到子类的东西   
    
    综上所述 : 
        不要定义相同的属性    太麻烦

重写

        要求:
            1. 权限修饰符  大于等于父类的权限修饰符
            2. 返回值类型     要和父类一致
                    基本数据类型        完全和父类方法一致 
                    引用数据类型        小于等于父类的返回值类型
        
            3. 方法抛出的异常  必须小于等于父类方法抛出的异常  (异常)
父类 和 子类有同样的方法  , 在子类的使用中  ,优先使用谁的 ?
        优先使用子类的方法
        使用 super.方法 可以用父类的方法
 
    父类和子类都有同样的方法 , 子类类型 存储 子类对象  , 调用的方法是 子类 的方法
    父类和子类都有同样的方法 , 父类类型 存储 子类对象  , 调用的方法是 子类 的方法
    在执行时 会确定这个对象的实际类型 , 按照实际类型来执行方法 (实际执行 默认执行自己的)
    以上叫做 动态绑定
    
    动态绑定  仅限于 非静态方法 。

静态方法 仍然是 静态绑定 , 如果对象被父类变量存储  那么执行父类的静态方法

final 关键字

    final 最终的 不变的 , 它是修饰符 , 它修饰的成员 都是最终的不变的 .   
    作用 : 
        1. 修饰类 最终的类
                 该类无法被继承   例如 String     
        2. 修饰方法 最终的方法
                 该方法无法被重写     
        3. 修饰属性     
                该属性只要值确定了 那么值永不可变
                该属性又被称为 常量 
                
                final 修饰的属性必须在声明时就赋值
                否则 , 必须在每个构造器中 都对其进行赋值 
                一定要保证 final 修饰的属性 在对象创建之后必定有值 
        
        4. 修饰局部变量
                只要值确定了 那么值永不可变 也叫做常量

多态

 一种指令 多种状态

多态发生的三个基石
    1. 必须发生继承关系
    2. 必须有方法的重写  
    3. 父类引用指向子类对象  : 父类型的变量 存储的子类的对象  -- 实际执行的子类重写后的方法

组合 

    可以被称为 面向对象的第四大特性

就是相当于表的外键,关联另一张表

 

最新文章

  1. slave IO流程之一:mysql登陆过程(mysql_real_connect)
  2. 回文自动机(BZOJ2565)
  3. Java类中各种静态变量的加载顺序的学习
  4. Python笔记——类定义
  5. 备忘: Install MODI for use with Microsoft Office 201x
  6. Mac下开启FTPserver
  7. HTTP 头部
  8. SQL中的取整函数FLOOR、ROUND、CEIL、TRUNC、SIGN
  9. 数据库相关 sql 语句
  10. linux list all users.
  11. [Unit Testing] Angular Unit Testing, ui-router, httpbackend and spy
  12. Nexus远程Maven仓库索引下载教程
  13. 快速构建Windows 8风格应用33-构建锁屏提醒
  14. [贪心][高精]P1080 国王游戏(整合)
  15. 实例说明Java中的null
  16. Linux服务器安全审计工具与流程完全指南
  17. Map集合学习总结
  18. XML 和 DTD
  19. 23. pt-slave-delay
  20. windows下基于IIS配置ssl证书

热门文章

  1. 使用jxls技术导入Excel模版数据(转自其他博客)
  2. HBuilde H5开发,关于JSON的Storage存储
  3. 什么是Github的元数据metadata以及如何备份github上的数据
  4. 最详细的Vue Hello World应用开发步骤
  5. 重大漏洞!PHP multipart/form-data头部解析远程拒绝服务漏洞
  6. 转 C++11 并发指南std::condition_variable详解
  7. create-react-app部署到GitHub Pages时报错:Failed to get remote。origin.url
  8. 检测Android和IOS
  9. c#类中字段和方法中变量的声明问题
  10. Java获取虚拟机内存和操作系统内存及其线程