墨烯的Java技术栈-Java基础-004

 一.Object通用方法

1.概念

在Java中,'Object'是所有类的根类.它是Java中所有类的超类,因此每个类都可以被认为是'Object'的子类.'Object'类定义了所有对象都具有的一些通用行为和属性 

(1)基本方法:equals(),hashCode()等 这些方法可以在所有的Java对象中使用剩下的下面具体讲

(2)多态性:因为所有类都是Object的子类,所以可以使用'Object'类引用任何一个对象

(3)对象数组:在Java中,可以创建'Object'类型的数组,这种数组可以存储任意类型的对象

(4)同步和锁定:Object类定义了一些方法 如wait(),notify(),notifyAll(),用于实现线程之间的协作和同步

(5)通用性:因为所有类都是Object类的子类,所以可以将任何对象都视为Object类型.这种通用性使得在Java的集合框架中可以容纳任意类型的对象(这个在说集合的时候具体说)

2.equals()

equals是Object的方法,用来比较两个对象的地址值是否相等(也就是栈 上一篇讲引用传递时候具体说过)

equals方法不能用于比较基本数据类型(byte那些) 如果没有对equals方法进行重写(重写下面会说到) 则相当于==,是引用类型的变量是所指向的对象的地址值

一般情况下,类会重写equals方法用来比较两个对象的内容是否相等.比如String类中的equal是被重写了,比较的是对象的值

这就是String重写的具体内容

3.hashCode()

这个方法用来返回字符串的哈希码

哈希码(也就是对字符串一次性加密处理而形成的杂乱字符串 通常在用于密码加密和验证的 是一种算法)

4.toString()

这方法返回的是该Java对象的内存地址经过哈希算法得出的int类型的值在转换十六进制.这个输出的结果可以等同的看作Java对象在堆中的内存地址(不是真的内存地址)

一般这个方法我们用来重写成我们需要的信息就比如在之后做项目时(个人信息这种)

注意toString返回值是String

这样就可以返回自己想要的结果了

5.clone()

clone就是复制,在 Java语言中, clone方法被对象调用, 所以会复制对象, 所谓的复制,首先要分配一个跟原来对象一样大的空间 然后在这个新空间创建一个新对象

是不是跟new很像

new是创建一个对象 而clone是复制一个对象

并且new操作是复制引用就复制一个相同地址(栈)指向同一个内容(堆)

而clone是复制对象 即不仅复制一个地址还复制一个内容

6.getClass()

这个方法返回一个对象的类对象(Class对象) 就是这个对象所属的类而获取这个类的相关信息 比如构造方法,方法,属性等信息

通常用于获取Class对象(适用于已有对象,但不适合静态上下文中获取Class对象)

二.继承

这个是面向对象编程的一个基本特性, 前面就经常提到,它允许我们定义一个新类,并从另一个已经存在的类继承其属性和方法.被继承的类称为父类或超类(Object) 新定义的类叫子类

继承关键字是extends 以后会经常用到 单继层继承(父类有子类 子类有子子类这样)

1.访问权限

public:对所有类可见

protected:对同一包内的类可见,对子类可见,对不同包的子类(即有继承关系的)也可见 但是非子类的外包类不允许

default(无修饰符):对同一个包内的类可见,对不同包的子类不可见

private:只对同一个类内部可见

还是无法理解就看这个图 可以很直观的对比出区别

2.抽象类与接口

概念

抽象类

如果有一个类中没有包含足够的信息来描述一个具体的对象,这样的类就是抽象类

但是抽象类也是类 内部可以包含普通方法和属性,甚至构造方法

它们两个都是用来定义行为的规范,但区别也很大

(1)抽象类(abstract class 类名{})

1)可以包含抽象方法和非抽象方法

(抽象类也是类 内部可以包含普通方法和属性,甚至构造方法)

(抽象类中可以有构造方法 给子类创建对象时,初始化父类的成员变量)

2)抽象类不能被实例化(不能new)

3)子类使用extends关键字继承抽象类

(抽象方法也不能是private的)

(抽象方法不能被final和static修饰,因为抽象方法要被子类重写)

(抽象类必须继承, 并且继承后子类要重写父类中的抽象方法,否则子类也是抽象类 必须用abstract修饰)

(抽象类不一定有抽象方法,但是有抽象方法的一定是抽象类)

4)一个子类只能继承一个抽象类

作用 

抽象类本体不能被实例化 要想使用 只能创建该抽象类的子类,然后让子类重写抽象类中的抽象方法

是不是感觉 这样不就弄的太麻烦了 确实是这样得 但是使用抽象类相当于多了一重编译器的校验

比如我们需要用子类完成工作 而不小心调用成父类的了普通类编译器就不会报错 但是父类是抽象类就会实例化的时候提示我们尽早发现问题

(2)接口(class 类名 implements 接口名)

在Java中 接口可以看成是:多个类的公共规范,是一种引用数据类型

1)只能包含抽象方法( 接口每一个方法都是public的抽象方法 即接口的方法会被隐式的指定为public abstract 其他修饰符都会报错)

2)接口不能被实例化

(接口类型是一种引用类型,但是不能直接new接口的对象)

(重写接口中方法时,这个方法不能使用默认的访问权限(默认访问权限指default))

(接口中可以含有变量 但是接口的变量会被隐式的指定为public static final变量)

3)类使用implements关键字实现接口

(接口的方法不能在接口中实现,只能由实现接口的类来实现)

(接口中不能有静态代码和构造方法)

4)一个类可以实现多个接口(一个类实现多个接口时 每个接口中的抽象方法都要实现,否则类必须设置为抽象类) 

(接口虽然不是类,但是接口编译完成后字节码文件的格式是.class)

(如果类没有实现接口中的所有抽象方法,则类必须设置为抽象类)

题外话:从jdk8开始接口中还可以包含default方法 并且ctrl+i可以快速实现接口

当然只是看上面一大堆信息 可能会感到困惑 我直接来总结一下它们的关系吧

类与类之间可以 通过extends来继承

类与接口之间:通过implements来实接口

接口与接口之间 也可以通过extedns来进行关联,这个时候可以理解为扩展接口的意思

当然要记住抽象类也是类 它也可以完成实现接口 这一点一定要记好!

接口与接口之间不同于类只能一个类继承一个类 接口之间可以多继承 也可以理解为接口的继承是多个接口合并起来了

如果上面的看完还是懵懵懂懂的 可以直接从下面的表根据它们两个的区别来记

3.super

(1)调用父类的构造方法:在子类的构造方法 使用super关键字可以调用父类的构造方法 用于完成父类的初始化操作 如果子类的构造方法没有显式地使用super关键字 调用父类的构造方法 那么编译器会自动将无参构造方法作为默认调用

(2)调用父类的成员变量和成员方法

在子类中 通过super关键字可以引用父类的成员变量和成员方法 当子类和父类具有同名的成员变量或成员方法时 使用super关键字可以明确指定父类的成员

(3)调用被覆盖的父类方法

当子类覆盖了父类的方法时 使用super方法 可以在子类调用被覆盖的父类方法 这通常发生在子类需要扩展父类方法的功能 但又要保留父类方法的原有功能时

简单来说 super关键字的作用是为了方便在子类中的访问和调用父类的成员和方法 确保子类在继承父类时能正确地访问和操作父类的属性和方法

4.重写与重载

(1)重写

指子类可以重新定义父类已有的方法,重写方法必须拥有相同的方法名,参数类,参数个数,返回类型,访问修饰符的权限不能低于父类中被重写方法,重写主要目的是实现多态性 即在运行时根据对象的实际类型调用相应的方法

(2)重载

指同一个类中,可以有多个同名方法,但这些方法的参数类型,参数个数或者参数顺序必须不同,符合类型可以相同也不同 重载的目的是提高方法的可扩展性和便捷性

它们两个的区别也很明显

重写是子类对父类 对父类方法重写 并且 方法名 参数 参数个数 返回类型等都要一致 并且修饰符的访问权限 也不能低于父类被重写方法

重载是同一个类中 对同类的方法重载 相同的方法名 但是参数类型 参数个数 参数顺序必须不同 

今天的内容很多 但是Java不是死记硬背的 要靠理解 第一次看可能无法直接理解 等上完一段时间课又或者照葫芦画瓢的模仿写出代码 后再来看看 甚至你可以打完游戏再看 只要了解清楚就会慢慢的理解明白 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值