精华内容
下载资源
问答
  • Java - 所有类父类Object Java中所有的方法都是object提供的。 在object类中有三个方法比较重要,分别是:toString(); equals(); hasdCode(); 1)toString()方法 toString()方法在Java中的原码为: public ...

    Java - 所有类的父类Object类

    Java中所有的方法都是object类提供的。
    在object类中有三个方法比较重要,分别是:toString(); equals(); hasdCode();

    1)toString()方法

    toString()方法在Java中的原码为:

    public String toString() {
            return getClass().getName() + "@" + Integer.toHexString(hashCode());
        }
    

    原码中可见当对象调用toString方法时,后面输出的是hashCode值。

    2)equals()方法

    equals() 方法在Java中的原码:

    public boolean equals(Object obj) {
            return (this == obj);
     }
    

    之后在创建类时,对象之间调用equals方法进行比较时,如果不重写则调用的是Object类中的方法,比较的是地址。但是如果要比较的是内容,则必须重写equals方法。
    当创建String类型的对象,并且两个对象进行比较时,用String类型的equals方法,String类型的equals原码如下:

    public boolean equals(Object anObject) {
            if (this == anObject) {
                return true;
            }
            if (anObject instanceof String) {
                String anotherString = (String)anObject;
                int n = value.length;
                if (n == anotherString.value.length) {
                    char v1[] = value;
                    char v2[] = anotherString.value;
                    int i = 0;
                    while (n-- != 0) {
                        if (v1[i] != v2[i])
                            return false;
                        i++;
                    }
                    return true;
                }
            }
            return false;
        }
    

    在String类中Java本身对equals方法已经进行了重写,所以当使用String创建对象并进行对象的内容比较时,直接使用的是Java对String中的equals方法已经重写的方法,直接调用就行。而当自己创建的类对象进行比较内容时,必须自己重写equals方法。当然在后期中,Java框架就对equals方法进行了重写,就不必自己亲自写。

    3)hashCode()方法

    hashCode() 方法在Java中的原码

    public native int hashCode();
    

    hashCode() 看不懂,对,就是。Java不想让咱们看。

    我们对hashCode() 方法的理解:
    hash算法是一种不可逆的过程,将数字按照某种特定的过程(自己定义或已有的算法),将数字排列成某种代替它不可逆的值。在equals方法中判断hashCode值,是因为当hashCode值不相等时,类的对象肯定不同,后面的代码则不需判断。而值相等时,有可能存在按照某种算法,使得不同的对象hashCode值相等,则需判断后面的代码。hashCode值是对象特征值的编码。hashCode值也是做判断的过程。

    4)equals方法与hashCode方法的使用

    class ObservObject {
    
    	 private int age;
    	 private String name;
    
    	 public ObservObject() {}
    	 public ObservObject(int age, String name) {
        	 this.age = age;
        	 this.name = name;
    	 }
    
    	 public boolean equals(Object o) {
         	if(this == o) {
           	 	 return true;
        	 }
         	if(o instanceof ObservObject) {
            	 ObservObject that = (ObservObject)o;
             	if(o == null || this.hashCode() != that.hashCode()) {
                 	return false;
            	 }
            	 if(this.age != that.age) {
                	 return false;
             	 }
            	 if(!this.name.equals(that.name)) {
                	 return false;
            	 }
            	 return true;
        	 } else {
    	       	  return false;
        	 }
    	 }
    
     //随便写,写的过程符合两个特点:代替,不可逆
    	 public int hashCode() {
    	   	 int code = 0;
        	 code = code + this.age*31 + 31;
        	 return code;
    	 }
    }
    
    public class instanceofDemo {
    	 public static void main(String[] args) {
        	 ObservObject oo1 = new ObservObject(23,"李四");
        	 ObservObject oo2 = new ObservObject(23,"李四");
        	 System.out.println(oo1.equals(oo2));
     	}
    }
    
    "C:\Program Files\Java\jdk1.8.0_172\bin\java.exe" ...
    true
    
    Process finished with exit code 0
    

    在Object中,就只有这三个方法才会被使用到。也就只有这三个方法重要!

    在这里插入图片描述
    欢迎大家评论,留言。谢谢

    展开全文
  • Java中所有类父类——非常重要的Object。 ​ 在Java中所有的基类都有一个默认的父类,那就是Object。Object有下面几种方法 boolean equals(Object obj);//判断某个对象与此对象是否相等 final Class<?&...

    Java中所有类的父类——非常重要的Object类。

    ​ 在Java中,所有的基类都有一个默认的父类,那就是Object类。Object类有下面几种方法
    boolean equals(Object obj);//判断某个对象与此对象是否相等
    final Class<?> getClass()//返回此Object的运行时类
    int hashCode();//返回该对象的哈希码值
    String toString();//返回该对象的字符串表示
    void finalize();//垃圾回收器调用此方法来清理没有被任何引用变量所引用的资源
    Object clone();//返回该对象的克隆
    

    ​ 在Object类中,这些函数需要我们重写才能达到相应的功能。下面以重载toString函数为例:

    我们发现可以直接用System.out.println()输出自己的字符串表示。

    package test;
    class A {
    	int a;
    	A(){};
    	public String toString() {
    		return "This class A of toString function";
    	}
    }
    
    public class Kit {
    	public static void main(String[] arg) {
    		A aa = new A();
    		System.out.println(aa);//输出 This class A of toString function
    	}
    }
    

    另外Object的equals函数是判断两个对象是否引用的同一个对象,更确切的说是变量引用的对象内存地址是否为相等,而不是比较他们的内容是否一样

    但是我们可以对equals函数进行重载,来达到我们的目的(判断对象的内容是否一样)。

    这里需要注意的是’=='也是判断两个对象变量引用的对象是否相同,而不是比较他们的内容(或者你可以理解为对象变量里面存的都是引用对应的地址)

    展开全文
  • Java中Object是所有类父类所有类的对象都是Class的实例。贴上java doc的说明 为什么我们需要Object 这个问题找到了一个外国哥们的回答,...

    Java中Object是所有类的父类,所有类的对象都是Class类的实例。贴上java doc中的说明224831_Uobg_1400660.png

    为什么我们需要Object类

    这个问题找到了一个外国哥们的回答,http://stackoverflow.com/questions/2490875/object-class-as-super-class-in-java  感觉挺好

    225016_PkmS_1400660.png

    他说好处(1)可以使不同对象之间可以统一、互转。我觉得其中还包括 toString(),wait()...等公共方法的

                            统一定义

                  (2)对父类的逻辑处理统一,不需要根据有没有父类分两种实现,

    至于为什么是Object类是所有的父类,而不是class类可以移步

    https://www.quora.com/Why-is-the-Object-class-super-class-of-all-classes-and-not-the-Class-class

    但是问题来了,在JDK源码中很多类并没有父类,当然我们知道他们的默认父类就是Object,那是怎么保证的呢?

    如何保证Object是默认父类

    答:编译器编译的时候自动进去的。

    一般对于这种靠虚拟机运行的语言(如Java、C#等)会有两种方法处理默认继承问题。

    1、在编译源代码时,当遇到没有父类的类时,编译器会将其指定一个默认的父类(一般为Object),而虚拟机在处理到这个类时,由于这个类已经有一个默认的父类了,因此,VM仍然会按着常规的方法来处理每一个类。对于这种情况,从编译后的二进制角度来看,所有的类都会有一个父类。

    2、编译器仍然按着实际代码进行编译,并不会做额外的处理。如果一个类没有显式地继承于其他的类,编译后的代码仍然没有父类。然后由虚拟机运行二进制代码时,当遇到没有父类的类时,就会自动将这个类看成是Object类的子类(一般这类语言的默认父类都是Object)。

    从上面两种情况可以看出,第1种情况是在编译器上做的文章,也就是说,当没有父类时,由编译器在编译时自动为其指定一个父类。第2种情况是在虚拟机上做文章,也就是这个默认的父类是由虚拟机来添加的,

    其实Java就属于第一种。

    具体验证

    (1)编写一个类

    public class Test{
    public Test();
    public static void main(java.lang.String[]){};
    }

    (2)进行编译成.class,再反编译成txt

    (3)反编译结果 

    public class Test extends java.lang.Object{
    public Test();
    public static void main(java.lang.String[]){};
    }

    转载于:https://my.oschina.net/zlb1992/blog/863455

    展开全文
  • 1、思考 无论是ssm框架,还是springboot,只要使用mybatis都会使用到对象关系映射; 实际项目,往往除了表对象的基础属性,还需要加很多其他的属性;...但是问题又来了,在java中父类不能强...

    1、思考

    • 无论是ssm框架,还是springboot,只要使用mybatis都会使用到对象关系映射;
    • 实际项目中,往往除了表对象的基础属性,还需要加很多其他的属性;除了表的基础属性,不同的接口,添加属性又不同,造成类无用的属性太多,影响美观;
    • 这时候想到了继承,表对象做为父类,其他具体的业务类继承表对象,逻辑清晰,代码明了,复用性增加;
    • 但是问题又来了,在java中父类不能强转成子类,表对象有时候10+的属性,或者更多,这时候无论是构造方法,还是set,写着都好累,而且很丑。
    • 最开始查了很多网上的资料,父类是可以转子类,但是都不是太适合,我想的是更加通用,简单;
    • 最后想到两种办法,一种是反射,一种是json。
    • 反射原理比较简单,循环赋值。反射不止适用于父类转子类,只要具有相同属性的都可以转,都可以赋值。

    2、工具类

    先上代码,可直接食用
    
    package com.utils.v2;
    
    import com.alibaba.fastjson.JSONObject;
    
    import java.lang.reflect.Field;
    
    /**
     * @Description: 父类强转子类
     * @Author: zx
     * @Time: 2019-12-18 17:03
     **/
    public class StrongParentSubclass {
    
        /**
         * @Author zx
         * @Description 反射循环赋值
         * @Date 2019/12/18 18:32
         * @Param [parent, subclass]
         **/
        public static Object parentSubclass(Object parent,Object subclass){
            Field[] parents = parent.getClass().getDeclaredFields();//获取所有属性
            Field[] children = subclass.getClass().getSuperclass().getDeclaredFields();//获取父类所有属性
            try {
            for (Field fieldParent : parents){
                fieldParent.setAccessible(true);
                String nameParent = fieldParent.getName(); //获取属性的名字
                Object valueParent = fieldParent.get(parent);//获取属性值
                for (Field fieldChild : children){
                    fieldChild.setAccessible(true);
                    String nameChild = fieldChild.getName(); //获取属性的名字
                    Object valueChild= fieldChild.get(subclass);
                    if (nameChild.equals(nameParent)){
                        fieldChild.set(subclass,valueParent);
                    }
    
                }
            }
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            }
            return subclass;
        }
    
    
    
        /**
         * @Author zx
         * @Description 通过json
         * @Date 2019/12/19 9:21
         * @Param [parent, subclass]
         **/
        public static Object jsonParentSubclass(Object parent,Object subclass){
            String op = JSONObject.toJSONString(parent);
            return JSONObject.parseObject(op,subclass.getClass());
        }
    
    }
    
    
    

    3、测试

    		Document document = new Document();
            document.setDocumentCd("11111111");
            document.setDocumentTitle("title");
            System.out.println("1:"+new Date().getTime());
            DocumentView documentView = (DocumentView) StrongParentSubclass.parentSubclass(document,new DocumentView());
            System.out.println("2:"+new Date().getTime()+"--"+documentView.getDocumentCd()+"--"+documentView.getDocumentTitle());
            System.out.println("1:"+new Date().getTime());
            DocumentView documentView1 = (DocumentView) StrongParentSubclass.jsonParentSubclass(document,new DocumentView());
            System.out.println("3:"+new Date().getTime()+"--"+documentView1.getDocumentCd()+"--"+documentView.getDocumentTitle());
            System.out.println(documentView);
    

    结果:

    1:1576720028591
    2:1576720028592--11111111--title
    1:1576720028592
    3:1576720028788--11111111--title
    com.power.xsj13000x.dto.v2.DocumentView@5ba23b66
    

    根据结果发现,反射循环赋值时间更快一点。

    展开全文
  • java中父类的私有属性是不能被子继承的 这是霍顿的java7入门经典一书上在继承章节提到的,说的十分详细,不会...并且java语言规范JLS也说明了私有属性是不会被继承的,但可以通过父类的public方法权限来访问...
  • 演示通过getClass().getName()和getClass().getSuperclass().getName()获取Java运行时以及获取父类的类名的方法
  • 在编译阶段,当遇到一个没有父类的使用,编译器会指定一个默认的父类(一般为object),当该已经有一个父类,jvm会按照常规的方法去处理每一个。这样既造成了所有有事object的子类 //原始的,没有显式...
  • 问题描述 java.lang.Object是一个,是一个所有父类,注意是所有而不是接口。...可是Java语言不支持多继承,A继承了一个自定义的B,那么A必定不能够继承Object的,那A什么有Obje...
  • java语言中的子类对象和父类对象的创建过程!class Fu { protected String name = "李四"; protected int age = 6; static { System.out.println("父类静态代码块,给初始化用的。"); } {
  • java中的继承——父类与子类的关系

    千次阅读 2020-03-24 15:44:52
    父类引用指向子类对象时
  • 这篇文章主要介绍了Java中所有错误和异常的父类java.lang.Throwable,文章简单地分析了其源码,说明在代码注释,需要的朋友可以参考下在java语言中,错误的基类是java.lang.Error,异常的基类是java.lang....
  • Java类的共同父类Object

    千次阅读 2016-07-20 19:08:32
    Java.lang.Object所有Java类的最高层次父类。其内部不存在任何属性,但是存在几个经典方法如下:一.public int hashcode()–功能是返回当前对象的哈希码,系统会自动的给每个Java对象自动创建的整型编号。public ...
  • 作为其他所有类的基类,Object具有哪些属性和行为,是Java语言设计背后的思维体现。 Object位于java.lang包中,java.lang包包含着Java最基础和核心的,在编译时会自动导入。Object没有定义属性,一共有13个...
  • Java语言中,在子类定义与父类同返同名同参的方法将会出现“重写(覆写)”,子类将屏蔽父类的相同方法,调用子类的方法将不会调用到父类的该方法。
  • java中超(父类)的概念

    千次阅读 2014-03-07 22:06:25
    super关键词指向该关键词所在的父类,用来引用父类中的成员变量或方法。  通过 super.someMethod([paramlist])将调用父类中的 someMethod()方法。  该方法不一定是在当前的直接父类中定义的,可以是直接父类在
  • 首先说明一下结果:不可以,至少Java语言规范上说的是不可以。 今天遇到一个问题:向上转型是安全的,不需要进行强制类型转换。原因当然是子类是父类的超集,所以父类中的东西(成员变量和成员方法在子类中都有) ...
  • Java学习-详谈最高层父类-Object

    万次阅读 2020-08-12 17:19:32
    Object所有Java类的根父类 (多层继承的最高层的父类) 如果在的声明未使用extends关键字指明其父类,则默认父类为Object 比如:public class Person{ } 等价于:public class Per...
  • package com.atguigu.java; import java.io.FileNotFoundException...//子类重写父类的方法时抛出的异常大小不能比父类的异常大 //代码原理如下 // public class TestOverride { public static void main(Stri...
  • 有些人审题不清楚就回答了,看清楚题目,我说的是父类中的成员属性的值会被子继承!是父类的属性的值会被子继承,我不是问父类的属性会被子继承!大家看清楚好吗?大家是怎么理解的! class Father { ...
  • 刚睡完午觉起来,有点迷糊,然后接着练习Java中元组(tuple)的时候突然就遇到这么个问题,关于继承的问题,奇怪在睡觉之前怎么就没发现这个问题呢,传说的“面向睡一觉编程”吗。。。Orz先贴上代码: 首先是创建...
  • java语言中父类和子类之间的关系?区别于联系,或者相关的代码解释,
  • 文章目录Java语言基础-的继承继承的特点继承的分类继承的写法重写规则:“三同一小一大”规则方法重写和方法重载的区别调用父类的构造方法 Java语言基础-的继承 Java语言的三大特性之一 继承的特点 通过继承,...
  • 在 Java ,无论是 explicit 还是 implicit 方式,都要求在子类的构造方法调用其父的构造方法。如果父类无构造方法(其实是一个默认无参的构造方法),那么子类的构造方法会自动进行调用;如果 父类有...
  • Java中子是否继承了父类的私有属性及方法? 看课本上所描述的,子类继承父类,子类拥有父类所有的属性和方法,于是使用程序去验证,发现父类的私有属性和私有方法,子类是不能访问的,当然一些父类的私有属性可能...
  • Java语言中不允许的多重继承,只允许继承单个的,也就是一个子类只能继承一个父类; 在继承父类和子类应当有一定的联系,子类应该具有父类的某些基本特征,定义一个Person父类,再定义一个Student为...
  • 测试代码:package test; public class FatherTest { private String name; public FatherTest(){ ...--父类的无参构造函数--"); } public FatherTest(String name){ this.name=name; ...
  • 父类中定义showInfo()用于显示交通工具的品牌和颜色信息。 小汽车和卡车继承交通工具,它们分别有属性座位和载重。通过在子类构造方法中调用父类构造方法,分别构建轿车和卡车对象。 通过子类继承父类的...
  • 使Java语言变得易于使用和简单, 如果一个可以继承多个,那么这个类所有成员变量名和方法名必须要不同(C++就是这样要求的).这是前提,我们必须确定这个才能用多重继承,如果在方法名或者成员变量名很多情况下,这...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 162,698
精华内容 65,079
关键字:

java语言中所有类的父类是什么

java 订阅