day16--继承

继承:追求程序/系统/代码的可重用性
    可重用:一次编写,多个地方都可以使用,节省代码,提高效率
    理解:
        将多个类中共同/公有的属性和方法,抽取到另一个类中,那么这个类就可以成为这多个类的父类
        同时保留自己特有的属性和方法(龙生九子,各有不同)
    Java中的单继承和多实现(亲爹只能有一个,干爹可以有很多)
        Java只支持单继承,也就是说一个类只能有一个父类!(有血缘关系的只能有一个)
        后续会讲到接口,Java支持多实现接口,也就说一个类可以有多个干爹
继承下构造方法的执行过程:
    要想创建子类的对象,必须先创建父类的对象;也就是说先执行父类构造方法,再执行子类构造方法
    简单理解/例子:
        先有爹才能有儿子
        哪个当爷的,不是从当孙子过来的呢?

关于继承下的程序执行原理:
    1.构造方法:参考上述
    2.执行子类对象调用的属性和方法
        当子类中有这个属性或方法时,就执行子类自己的,
        当子类中没有这个属性和方法时,就执行父类的
        若子类中和父类中都没有这个属性和方法,那就只能说明写错了!

子类不能继承父类哪些资源?
    父类私有的属性和方法不能继承
    子类与父类不同包时,子类也不能继承父类默认访问修饰符修饰的属性和方法
    不能继承父类的构造方法


super关键字
    (1)super代表父类对象
    (2)super如果出现在子类构造方法中,必须是第一句
    (3)使用super关键字也不可以访问父类中定义为private的属性和方法

方法的重写(override):
父类不能直接使用子类中特有的属性和方法,如果从父类继承的方法不能满足子类的需求,
则在子类中可以对父类的同名方法进行重写,以符合需求。
    规则:
        首先必须要有继承关系——————子类重写父类的方法
        重写方法和被重写方法必须具有相同的方法名
        重写方法和被重写方法必须具有相同的参数列表
        重写方法的返回值类型必须和被重写方法的返回值相同或者是其子类
        重写方法不能缩小被重写方法的访问权限
当子类重写了父类的方法之后,那么子类再调用这个方法时,就只执行子类中的方法实现,而不再执行父类中的方法实现,
要想既使用父类中的方法实现,又同时使用子类中的方法实现,可以在子类重写的方法中使用super.方法来实现

Object类:是所有类的父类,如果一个类没有使用extends,那么这个类就默认继承与Object类
    所有类都可以使用Object中的一些方法,子类经常重写Object中的一些方法,比如:toString、equals等,
    重点!!!——————equals方法
        Object中equals方法比较两个对象是否相同,实际上就是使用的"=="进行比较的,也就是说Object的equals方法默认比较两个对象的地址是否相同
        同样也就是说,若一个类没有重写Object的equals方法,那么他们比较equals也是在比较地址,而不是比较值/内容
        但是String方法重写了equals方法,使用的是判断两个字符串的值是否相等,若相等返回true,否则返回false,所以说String的equals方法是比较两个字符串的值是否相同

        但是面试题问:“==和equals有什么区别”时,不能直接说==比较地址,equals比较值,需要先说equals是默认使用Object中的方法,
        本质上就是在比较地址,但是像Arrays、String等类重写了Object的equals方法,内部的实现是比较的值是否相等

instanceof关键字:判断该对象是否是某个类型
    a instanceof A;
    判断对象a的类型是否是A
    判断左边的对象是否是右边的类型
final关键字:
    final可以修饰类、修饰方法、修饰变量(成员变量和局部变量都可以),final不能修饰代码块

    final修饰类:
        该类不能再被继承,而且,final一旦修饰类,那么该类中的方法就默认是被final修饰了
    final修饰方法:
        该方法不能被子类重写
        但是该方法可以在类中被多次重载
    final修饰变量:
        表示为常量,也不能再修改它的值

final修饰基本数据类型和引用型数据类型
    当final修饰一个基本数据类型时,表示该基本数据类型的值一旦在初始化后便不能发生变化;
    如果final修饰一个引用类型时,则在对其初始化之后便不能再让其指向其他对象了,
        也就是说final修饰的对象,不能再=其他的对象,也不能=new 构造方法()
    但该引用所指向的对象的内容是可以发生变化的。
        也就是说,final修饰的对象不能=其他对象,但是final修饰对象的属性和方法是可以改变的
    举例:
        final Student student = new Student();
        student.setStudentNo("10001");
        student.setStudentName("张三");

        //student = new Student();//final修饰的student不能被重新赋值为其它对象
        //final修饰的student的内容可以改变
        student.setStudentName("李四");
        student.setStudentNo("10005");

        //int是基本数据类型,但是int数组是引用型数据类型
        final int[] nums = {1,2,3,4,5};
        //nums = new int[10];
        nums[0] = 5;
————————————————
版权声明:本文为CSDN博主「菜鸟码农12」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/m0_66150966/article/details/127615587

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值