java学习笔记008 面向对象(四)多态


1.向上转型
//向上转型再向下转型   可
2.instanceof关键字
Object person = new Person();
if(person instanceof Person) {
	Person p = (Person)person;//Person类引用p指向Object类的对象person
}
3.equals(Object obj) 与 ==
//==比较基本数据类型时,比较的是保存的数据是否相等,数据类型不一定相等
//==比较引用数据类型时,比较的是对象的地址是否相同
System.out.println(10 == 10.0);//true
System.out.println('A' == 65);//true
//equals()只适用于比较引用数据类型,Object类中equals()方法具体实现就是==
//重写equals()
public boolean equals(Object obj){
	if(this == obj){
		return true;	//对象的地址相同
	}
	if(obj instanceof 类名){
		return 比较逻辑;
	}
	return false;
}
4.关于return this == obj;的理解
/*
  根据多态性,不同类型的引用a和b可以指向同一个对象,但是a和b所属的类必须有继承关系
  比较两个对象的地址,如果相等,那么说明this和obj的类具有继承关系
*/
if(this == obj)return true;

//下面分析为什么是这样
//因为this==obj为true,那么this和obj指向同一个对象的地址,也就是说只有一次new,只可能是new子类对象,然后父类引用指向子类对象
Student stu = new Student("name");
Person person = stu;	//可以向上转型
//指向同一个子类的对象,子类对象的某些属性和方法虽然可能在父类对象中是不可见的,但是可以通过后面的instanceof判断后强转拿出来比较。总之,指向同一个对象,肯定是“相等”的。
5.Object类中的toString()
public String toString() {
	return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
6.JUnit单元测试
//好处:不用创建对象再调用方法,可以直接写方法名调用类中方法
//1.创建测试类
//2.创建测试方法
@Test
public void 方法名(){	
	//测试代码
}
//3.测试代码
//双击方法名,右键->run as junit
7.JDK5.0新特性 自动装箱拆箱
//自动装箱
int a = 12;
Integer num = a;
//自动拆箱
Integer num = new Integer(12);
int a = num;
7.基本数据类型、String、包装类之间的相互转换
基本数据类型、String-->包装类
Integer a = new Integer(12);
Integer b = new Integer("12");
包装类<-->基本数据类型
Integer a = new Integer(12);
int value = a.intValue;//或int value = a;自动拆箱
基本数据类型、包装类-->String
String value = 12 + "";
String value = String.valueOf(12);
String-->基本数据类型、包装类
int num = Integer.parseInt("1234");
8.一道面试题
Object obj = true ? new Integer(1) : new Double(2.0);
System.out.println(obj);//1.0
三元操作符类型的转换规则:对两个结果的数据类型,进行自动的类型提升,若两个操作数不可转换,则不做转换,返回值为Object类型
这里相当于Object obj = true ? new Double(1) : new Double(2.0);
9.另一道面试题
Integer i = new Integer(1);
Integer j = new Integer(1);
System.out.println(i == j);//false
Integer m = 1;
Integer n = 1;
System.out.println(m == n);//true
//Integer类中的IntegerCache类里面有一个Integer[],-128~127直接从这个数组里面找
Integer x =128;
Integer y = 128;
System.out.println(x == y);//false
10.一个小tip
Vector vec = new Vector();
vec.addElement(new Integer(1));
Object o = vec.elementAt(0);//以上三行也可以用Object o = new Integer(1);替代
int num = (int)o;
System.out.println(num);//1

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/280333.html

(0)
上一篇 2022年8月13日
下一篇 2022年8月13日

相关推荐

发表回复

登录后才能评论