day7(对象转型和多态,抽象类和接口)未完

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/myloveprogrmming/article/details/82870893

一Object类

所有的类都直接或间接继承Object类

1.Object类的equals()方法,它比较是否引用相同对象(或者说地址是否相同)。String类重写了这个方法,它比较的是字符串是否相同。

package day7;

public class Test {

	public static void main(String[] args) {
		String s1="123";//有一块地址,存有所有用这种方法写的值
		String s2="123";//有一块地址,存有所有用这种方法写的值
		String s3=new String("123");
		String s4=new String("123");
		System.out.println(s3.equals(s4));//equals()判断值是否相等
		System.out.println(s3.equals(s1));//equals()判断值是否相等
		System.out.println(s3==s4);//==比较地址,地址不同
		System.out.println(s1==s3);//==比较地址,地址不同
		System.out.println(s1==s2);//==比较地址,地址相同
	}

}

输出:
true
true
false
false
true

解释:

public class Test {

	public static void main(String[] args) {
		String s1="123";
		String s2="123";
		System.out.println(s1); //s1,s2虽然是相同的地址,但是s1的改变并不影响s2的改变...这里应该涉及到其他我不了解的细节..先这样记住,以后再说
		System.out.println(s2);
		s1="456";
		System.out.println(s1);
		System.out.println(s2);
	}
}

输出:
123
123
456
123

对于上面的s1的改变并不影响s2的改变,因为String类的是用final修饰的

,即:s1一旦改变值,就会创建一个新的串,再将s1指上去,图:

2Object类的hashCode()

注:hashCode即哈希码。这是一种算法就类似将'a'转化为97的ascii码。

返回该对象的哈希码值,每一个对象的哈希码值唯一 (类似于地址)。准确的说是大部分情况是唯一的,有时候不同对象的哈希码相同,要重写该hashCode()方法。例如:

public class Test {

	public static void main(String[] args) {
		String s1="123";
		String s2="123";
		String s3=new String("123");
		String s4=new String("123");
		System.out.println(s1.hashCode());
		System.out.println(s2.hashCode());
		System.out.println(s3.hashCode());
		System.out.println(s4.hashCode());
	}
}

输出://全是一样的,这时候就要重写这个hashCode()方法
48690
48690
48690
48690

public class Test {

	public static void main(String[] args) {
		Object obj1=new Object();
		Object obj2=new Object();
		Object obj3=obj2;//obj3和obj2指向相同的对象
		System.out.println(obj1.hashCode());
		System.out.println(obj2.hashCode());
		System.out.println(obj3.hashCode());
	}
}

输出:
2018699554
1311053135
1311053135

3Object的getClass()方法: 1基础知识:

Java的每个类都带有一个运行时类对象,该Class对象中保存了创建对象所需的所有信息。

可以用.class返回此 Object 的运行时类Class对象,也可以用getClass()获得。

getClass()方法简介:https://blog.csdn.net/expect521/article/details/79139829

获得此对象后可以利用此Class对象的一些反射特性进行操作, 例如:

this.getClass().newInstance(); //用默认构造函数创建一个该类的对象

this.getClass().getInterfaces(); //获得此类实现的接口信息

this.getClass().getMethods();//获得此类实现的所有公有方法

          2      Object obj=new Object();//称为硬编码(显示写上去的编码),当类名改变,程序涉及到该类名的地方都要改写,
        //反射机制:给A就创建A类的对象,给B就创建B类的对象,改配置文件即可,源代码不变

          3.

		Object obj=new Object();
		Class cla=obj.getClass();//通过反射获取到了Object类

4new创建一个对象的几种方式

猜你喜欢

转载自blog.csdn.net/myloveprogrmming/article/details/82870893