Object 类
        Object类 的主要作用
        Object 类的常用方法
        
    内容
        虽然有了对象的向上转型,可以解决了参数的统一问题,但是面对JAVA 开发之中如此众多的开发类
        所以现在就面临这样一个问题:参数类型怎么选择才能够保存所以的类对象呢?
        为此java里面考虑到了此种情况有一个Object类
        此类定义:public class Object
        可以发现在整个对的java里面只有Object 类的定义的时候没有定义父类,而其他的所有类都是Object类的子类
        也就是说在整个java之中,除了Object类之外,一切都存在有继承关系
        
        理论上定义一个类的时候如果没有继承任何的父类,那么其将默认继承Object类
        这样的直接好处就是,所以类的对象都可以使用Object来接收
        范例:利用Object接收对象

class Person{

}
public class objectclass{
public static void main(String args[]){
Object obj = new Person();// 向上转型
}
}

利用Object可以实现最终的参数类型的统一
            
        清楚了 Object 类的作用之后,下面要完善一些操作:
            在简单java类的时候需要提供有一个 getInfo() 的方法以返回对象信息
            在进行简单java类对象比较的时候准备有一个 compare() 方法进行比较
        那么从现在开始以上的这两个方法需要换名,在 Object 类里面定义有一下的两个匹配方法
            取得对象信息: public String toString();
            对象比较: public boolean equals(Object obj);
            
    取得对象信息
        如果说现在直接输出一个对象,默认输出的是一个对象的地址编码
        范例:观察默认的 toString

class Person{

}
public class objectclass{
public static void main(String args[]){
Person p = new Person();
System.out.println(p);
System.out.println(p.toString);
}
}

通过此代码可以发现,在默认情况下如果要输出一个对象都会执行 toString()方法,不管是否显式调用此方法
            于是 Object 类对于此方法就有了一个自己的默认实现,虽然不知道每个对象输出时都需要那些,但是至少知道每个对象存在都会有一个地址编码
            所以默认的输出内容就是对象的编码信息
            如果用户现在不希望输出编码,而希望输出具体的内容,则可以进行方法的覆写
        范例:覆写 toString() 方法

class Person{
private String name;
private int age;
public Person(String name,int age){
this.name = name;
this.age = age;
}
public String toString(){
return "姓名:"+this.name+";年龄:"+this.age;
}
} public class objectclass{
public static void main(String args[]){ // 为了方便模拟化调用
Person p = new Person("枫",20);
System.out.println(p); }
}

    对象比较:equals()
        对象比较在之前曾经使用过compare()方法进行表示,而且最为重要的是在之前实现对象比较时比较的流程:地址是否为空,属性是否相同
        范例:实现对象比较

class Person{
private String name;
private int age;
public Person(String name,int age){
this.name = name;
this.age = age;
}
public boolean equals(Object obj){
if(this == obj){// 地址相同
return true;
}
if(obj == null){ // 没得比
return false;
}
if(!(obj instanceof Person)){
return false;// 两个对象没关系
}
Person per= (Person)obj;
if(this.name.equals(per,name)&&this.age == per.age){
return true;
}
return false;
}
public String toString(){
return "姓名:"+this.name+";年龄:"+this.age;
}
} public class objectclass{
public static void main(String args[]){ // 为了方便模拟化调用
Person p1 = new Person("枫",20);
Person p2 = new Person("枫",20);
System.out.println(p2); // 有BUG 如果传进来的是字符串就会出错,所以以后有判断就..... }
}

以后开始,所编写对象比较操作,都以 Object 类的 equals()方法为主

    Object 类可以接收一切引用类型
        java的引用类型包含:数组,类,接口。现在已经证明了所有的类对象都可以使用 Object 进行接收
        可是数组和接口,他们也可以被 Object接收
        范例:利用 Object接收数组对象

public class objectclass{
public static void main(String args[]){
Object obj = new int[]{1,2,3};//利用Object接收整型数组,向上转型
if(obj instanceof int[]){ // 对象是否是int数组
int data[] = (int[])obj;//向下转型
for(int x = 0;x<data.length;x++){
System.out.println(data[x]);
}
}
}
}               

除了可以接收数组之外,接口也可以接收
        范例:辅助概念

interface A{// 定义了一个接口
public void ptintA();
} interface B{
public void ptintB();
}
class X implements A,B{
public void ptintA(){
System.out.println("AAAAAAAAAAAAAAA");
}
public void ptintB(){
System.out.println("BBBBBBBBBBBBBBBB");
}
}
public class Interface{
public static void main(String args[]){
A a = new X();//向上转型
B b = (B)a;// 虽然A与B没有关系,但是X是B的子类
b.ptintB();
}
}

    按照以上的思路解决Object 接收接口对象的问题

interface A{// 定义了一个接口
public void ptintA();
}
class X equals Object implements A{
public void ptintA(){
System.out.println("AAAAAAAAAAAAAAA");
}
}
public class Interface{
public static void main(String args[]){
A a = new X();//向上转型
Object obj = a;// 向上转型
A temp = (A)obj; // 向下转型
temp.ptintA();
}
}

Object 所有引用类型都可以接收,对于 数据的统一性操作上更加方便了

    总结
        1.Object类是所有类的父类,可以接收所以引用数据类型
        2.Object类提供的 toString()与 equals()方法可以应用在简单java类中

菜鸡的Java笔记 Object 类的更多相关文章

  1. 菜鸡的Java笔记 数字操作类

    数字操作类        Math 类的使用        Random 类的使用        BigInteger 和 BigDecimal 类的使用                Math 是一 ...

  2. 菜鸡的Java笔记 日期操作类

    日期操作类        Date 类与 long 数据类型的转换        SimpleDateFormat 类的使用        Calendar 类的使用                如 ...

  3. 菜鸡的Java笔记 国际化程序实现原理

    国际化程序实现原理 Lnternationalization        1. Locale 类的使用        2.国家化程序的实现,资源读取                所谓的国际化的程序 ...

  4. 菜鸡的Java笔记 - java 反射机制

    反射机制        1.观察 Class 类的使用        2.利用反射改善工程设计模式        3.反射操作类结构            content (内容)        1. ...

  5. 菜鸡的Java笔记 java基础类库 BaseClassLibrary

    java基础类库 BaseClassLibrary        StringBuffer 类的特点        StringBuffer,StringBuilder,String 类之间的关系   ...

  6. 菜鸡的Java笔记 第三十七 - java 线程与进程

    线程与进程        线程与进程的区别                最早的的时候DOS 系统有一个特点:只要电脑有病毒,那么电脑就死机了,是因为传统的DOS 系统属于单进程的操作系统       ...

  7. 菜鸡的Java笔记 第三十三 - java 泛型

    泛型 GenericParadigm        1.泛型的产生动机        2.泛型的使用以及通配符        3.泛型方法的使用                JDK1.5 后的三大主 ...

  8. 菜鸡的Java笔记 第三十 - java 异常的捕获及处理

    异常的捕获及处理        1.异常的产生分析以及所带来的影响        2.异常的处理的基本格式        3.异常的处理流程        4.异常的处理模式        5.自定义 ...

  9. 菜鸡的Java笔记 第二十五 wrapperClass 包装类

    wrapperClass 包装类         1.包装类的特点        2.装箱与拆箱操作        3.数据转型处理            内容        Object 类可以接收 ...

随机推荐

  1. C语言练习:hackerrank十五关

    第一关:Hello World C 输入一行字符串(可能含空格),输出hello world\n,字符串 Sample Input 0 Welcome to C programming. Sample ...

  2. 使用CEF(二)— 基于VS2019编写一个简单CEF样例

    使用CEF(二)- 基于VS2019编写一个简单CEF样例 在这一节中,本人将会在Windows下使用VS2019创建一个空白的C++Windows Desktop Application项目,逐步进 ...

  3. PHP审计之POP链挖掘

    PHP审计之POP链挖掘 前言 续上文中的php反序列化,继续来看,这个POP的挖掘思路.在其中一直构思基于AST去自动化挖掘POP链,迫于开发能力有限.没有进展,随后找到了一个别的师傅已经实现好的项 ...

  4. Spring Boot 整合 Apache Ignite

    关于Ignite的介绍,这边推荐三个链接进行学习了解. https://ignite.apache.org/,首选还是官网,不过是英文版,如果阅读比较吃力可以选择下方两个链接. https://www ...

  5. 【UE4】GAMES101 图形学作业0:矩阵初识

    作业描述 给定一个点P=(2,1), 将该点绕原点先逆时针旋转45◦,再平移(1,2), 计算出变换后点的坐标(要求用齐次坐标进行计算). UE4 知识点 主要矩阵 FMatrix FBasisVec ...

  6. 【c++ Prime 学习笔记】第16章 模板与泛型编程

    面向对象编程(OOP)和泛型编程(GP)都能处理在编写程序时类型未知的情况 OOP能处理运行时获取类型的情况 GP能处理编译期可获取类型的情况 标准库的容器.迭代器.算法都是泛型编程 编写泛型程序时独 ...

  7. win10安装git fatal: open /dev/null or dup failed: No such file or directory错误解决方法

    原因看大家意思应该是 非即插即用驱动文件null.sys问题. 网上有很多方案.最后试了一个可行的. 替换  windows/system32/drivers/null.sys为网盘中的文件即可. 链 ...

  8. UltraSoft - Beta - Scrum Meeting 11

    Date: May 27th, 2020. Scrum 情况汇报 进度情况 组员 负责 今日进度 q2l PM.后端 记录会议 Liuzh 前端 增加了对重复日程的支持 Kkkk 前端 测试验证前后端 ...

  9. [no code][scrum meeting] Alpha 13

    项目 内容 会议时间 2020-04-21 会议主题 OCR技术对接会议 会议时长 45min 参会人员 全体成员 $( "#cnblogs_post_body" ).catalo ...

  10. Asp.net Core使用EFCore+Linq进行操作

    注:EFCore和EF有区别,在core中写的也有一点区别,每个人写法不同仅供参考写的比较细致耐性一点看完会有收获的 首先加上必要的引用 using Microsoft.EntityFramework ...