JAVA继承和final关键字笔记

继承(关键字extends):
    优点:
        1.提高了代码的复用性
        2.让类与类之间产生了关系,给多态提供了支持

    java只支持单继承,对c++中的多继承机制进行改良

    单继承:一个子类只能有一个直接父类
    多继承:一个子类可有多个直接父类(java不允许)
        多继承会产生调用的不确定性。
        比如两个父类都有show(),子类就不知道调用的是哪个show方法
    
    java支持多层继承:A继承B B继承C

    当要使用一个继承体系时:
        1.查看该体系中的顶层类,了解该体系的基本功能
        2.创建体系中的最子类对象,完成功能的使用
    
    使用场景:
        当类与类之间存在着所属关系(is a),就定义继承。
        例如:学生和教师都是人 所以学生和教师可以继承人 
    
    成员变量:
        当本类的成员和局部变量同名用this区分
        当子父类中的成员变量同名用super区分父类
        super和this的区别:
            this代表本类对象的引用
            super代表一个父类的空间。子类对父类的调用
        子类不能直接访问父类中私有的内容

    成员函数:
        子类可以调用父类的函数。
        子父类有一样的函数 会运行子类的函数 称为覆盖
        函数的两个特性:
            1.重载:同一个类中
            2.覆盖:子类中。覆盖也成为重写 override
                注意:子类权限必须要大于等于父类的权限
            3.静态只能覆盖静态 或者被静态覆盖(比较少见)
    
    覆盖的使用场景:
        当对一个类进行子类的扩展时,子类需要保留父类的功能声明
        但是要定义子类中该功能的特有内容时,就使用覆盖操作完成
    
    子父类中的构造函数:
        特点:子类构造函数中的第一行有一句默认的隐式语句。super();
            例如:
                Constructor(){
                    //super();子类中默认存在 调用的是父类中的空参数的构造函数
                    ....
                }

            子类的实例化过程:
                子类中所有的构造函数默认都会访问父类中的空参数的构造函数。
                构造函数不能覆盖 不能继承 只能super调用 
        
        为什么子类实例化要访问父类的构造函数:
            因为子类继承了父类,获取到了父类中的内容(属性),
            所以在使用父类内容之前 要先对父类进行初始化。
            
            如果父类中没有定义空参数的构造函数 那么子类的构造函数必须用super明确
            要调用的父类的构造函数 

            注:super语句必须定义在子类构造函数的第一行,父类必须先进行初始化
            this();也必须放在第一行 super和this只能有一个

    对象的实例化过程:
        Person p = new Person();
        1.JVM读取指定路径下的Person.class文件,并加载进内存
        并会加载Person的父类(如果有直接父类的情况下)        
        2.在堆内存中开辟空间,分配地址。
        3.并在对象空间中,对对象中的属性进行默认初始化。
        4.调用对应的构造函数进行初始化
        5.在构造函数中,第一行会先调用父类中的构造函数进行初始化。
        6.父类初始化完毕再对子类的属性进行初始化
        7.进行子类构造函数的特定初始化
        8.初始化完毕,将地址赋值给引用变量


final关键字
    1.final可以修饰类,方法,变量。
    2.final修饰的类不可以被继承
    3.final修饰的方法不可以被覆盖
    4.final修饰的变量是一个常量。只能被赋值一次 值不能变化
        相当一个常量
        例如:public static final int PI = 3.14;//相当于全局的常量
        常量所有字母都要大写,多个单词,中间用_连接。
    5.内部类只能访问被final修饰的局部变量

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值