java整理学习笔记

本文深入探讨Java面向对象的高级特性,包括this和super关键字的使用,final修饰符的作用,以及封装、继承和多态的概念。详细解析了重写与重载的区别,抽象类与抽象方法的特点,和toString(), equals()方法的重写技巧。
摘要由CSDN通过智能技术生成

this和super以及final

super 和 this 之间的区别:

  • this 指代当前创建的对象
  • 调用本类其他构造器: 构造器的首行 this(参数列表)
  • 区分同名变量问题(局部和成员) this.
  • super 指代父类对象
  • 调用父类构造器
  • 默认调用父类的空构造
  • 调用父类的其他构造器需要显示使用 super(参数列表)
  • 要使用在构造器的首行
  • this和super不同时存在调用构造器使用
  • 区分同名变量问题(子类和父类)
  • 如果出现,局部,子类成员,父类成员同名问题,调用时候
  • 调用局部,直接写
  • 调用子类成员,使用this.
  • 调用父类成员,使用super.
  • 如果不存在同名问题,相当于省略了this.或者super.
  • 创建子类对象之前,要先创建父类对象 -->先父类后子类(父类对象在子类对象内存空间中的,外部无法直接操作,只能在子类中通过super使用这个内部的父类对象)
  • 初始顺序: 先静态后成员
  • final 最终的
  • 1.被final修饰的变量为常量
  • 变量的数据类型如果是基本数据类型: 存储的数据值不能改变
  • 变量的数据类型如果是引用数据类型: 存储对象的地址不能改变,但是对象内存中的属性值可以改变
  • 2.被final修饰的方法不能被重写
  • 3.被final修饰的类不能被继承(太监类)
  • 问: 属性私有了,–>提供getter,setter能够使用么???能不能通过设置器和访问器操作父类中的私有属性

面向对象的三大特性

面向对象的三大特性:

  • 封装: 隐藏内部的实现细节,对外提供公共的访问方式
  • 继承: 子类一旦继承父类,就有权使用父类中的内容
  • 多态: 一种事物的多种形态|多种表现形式
  • 多态的前提: 类的继承|接口的实现
  • 多态的最终体现:父类的引用指向子类的对象
  • 如果子父类中有重写方法,多态调用的是子类中重写的方法
  • 注意: 父类引用对子类的新增内容不可见
  • 使用多态调用成员:
  • 1)成员变量
  • 编译运行看父类|看左边|看类型
  • 2)成员方法
  • 编译看父类,运行看子类
  • 编译看左边,运行看右边
  • 编译看类型,运行找对象

多态:子类继承父类,重写父类的方法,父类引用指向子类对象
equals方法比较俩个字符串,Object是所有子类的父类,用来代替可能
传入的子类,代表传入的一个引用类型,好处是可以不用写对应的多个
子类的方法,提高代码的复用性.

 public boolean equals(Object anObject) {
        if (this == anObject) {
            return true;
        }

重写和重载

  • 重写 与 重载 之间的区别: 都是方法的重写和重载
  • 重载:
  • 同一个类中
  • 多个方法,方法名相同
  • 参数列表不同|方法签名不同
  • 重写:
  • 1.不同的类
  • 2.继承|实现
  • 3.方法签名相同
  • 为什么要使用重写:
  • 需求: 子类存在从父类中继承的功能,但是子类对功能的实现,与父类不一样,可以对这个功能进行方法的重写
  • 如何使用重写方法:
  • 子类对象在调用这个功能的使用,如果有重写方法,就调用重写方法,如果重写,就会调用从父类中继承的功能
  • 检查是否为重写方法:
  • 1)重写方法的左侧存在向上的三角形
  • 2)@Override 在方法上添加注解,强制检查,如果不是重写方法就报错
  • 注意:
  • 私有的内容不能被继承,重写
  • 被final修饰的方法不能被重写
  • static的内容不能被重写
  •  如果子父类中存在方法签名相同的方法,父类中这个方法为static修饰的,子类中的同名方法必须也要被static修饰
    

tostring和equals方法

1.toString() 把对象的内容以字符串的形式展现

  • 源码:
public String toString() {
        	return getClass().getName() + "@" + Integer.toHexString(hashCode());
    	}
  • 在打印一个对象的引用的时候,打印对象的地址,默认打印的是这个对象调用了toString 方法的返回值
  • 需求: 想要在打印一个自定义的引用数据类型的对象引用时,打印这个对象所有成员属性的值,而非地址

2.equals 方法

  • 源码:*
public boolean equals(Object obj) {  //Object obj=new Person();
        return (this == obj);
    }

equals 和 == 之间的区别:

  • == 比较引用数据类型的地址值
  • equals() 如果使用的Object类中的equals()方法比较的还是对象的地址
  • 如果有对equals()方法进行重写,可以实现比较对象的内容

instanceof

转型:
强类型的语言
数据类型转型
java.lang.ClassCastException 类型转换异常

  • 为了避免类型转换异常的出现,介绍一个运算符 instanceof
  • 引用 instanceof 类型
  • 判断前面的引用是否是后面类型的一个对象|他子类对象,如果是返回true,不是返回false

抽象方法抽象类

抽象类: 被abstract修饰的类

  • 抽象方法: 被abstract修饰的方法
  • 可以没有方法体
  • 必须在抽象类中
  • 注意:
  • 1.抽象类不能被实例化|不能创建对象
  • 2.抽象方法要存在与抽象类中,抽象方法必须被重写
  • 3.抽象类的使用:
  •  具体子类: 重写所有的抽象方法+ 按需新增
    
  •  抽象子类: 按需重写抽象方法 + 按需新增
    
  • 4.一个抽象方法一旦被重写过,就不需要再次被重写啦
  • 5.抽象类中可以存在普通方法,可以存在抽象方法
  • 6.abstract 不能和private,final,static,native一起使用
  • 父类:
  • 具体的父类:可以创建父类对象,父类中的内容如何定义
  • 抽象的父类:
  • 不想要能够直接创建父类对象
  • 父类中的方法体不知道如何实现
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值