多态

多态
封装 ,继承 ,多态。
在学习每一个技术时,记住学习它的案例
1。理解和掌握多态的使用
多态 :父类的引用可以转入子类的对象。

多态的最基本使用方法
1.父类的引用作为方法的形参。

			System.out.println("给宠物挂号");
			System.out.println("给宠物吃药");
			pet.setHealth(pet.get.Health() + 5);
}

2.父类的引用可以作为方法的返回值类型。

			if(choice == 1){
				Dog dog = new Dog("小黄",20,60,"阿拉斯加");
				System.out.println("开心的。。。");
					return  dog;
			}else if(choice == 2){
				Cat cat = new  Cat();
				cat.setName();
				.......
				syso....;
				return Cat;
			}
			return  null;
}

2.掌握instanceof关键字的使用
它是多态使用之后的必然产物,因为多态场景下,无法区分当前父类引用具体1指向了何子类对象。所以可以通过instanceof关键字来判断当前引用了何类型的对象。
对象名 instanceof 类型名

类型转型
多态中我们发现:

		Pet pet  = new Dog(); 其实就是一种类型转换而已,类似于double num = 10;

在面向对象这一块,他被称为向上类型转换。

同样的有了多态之后,有些时候我们得到的是父类引用的对象,但是如果现在希望对子类特有的信息进行操作,依靠于父类引用无法实现,所以需要向下类型转换,类似于 int num = (int)10.1;

Cat cat = (Cat) pet;
cat.setGender();

在类型转换时,很可能出现问题:父类的引用指向的对象和你要转换为的类型不匹配,所以为了避免这种问题,一般都要添加instanceof判断。

if(pet instanceof Cat){
	Cat cat  = (Cat)pet;
	cat.setGender();
}

String的equals方法:

// Object 类的此方法  是给所有的类使用的,希望所有的类在比较相等时都采用此方法
//所以使用了多态:父类的引用(Object  anObject)作为方法的形参 将此方法可扩展性大大的提升了
//继承自Object类  并且进行了重写  方便我们进行【字符串的相等比较】
/*
String  str1  = "hello world";
String  str2 = "hello world";
str1.equals(str)
*/
public boolean equals(Object anObject){
	// str1:this    anObject :str2
	//判断地址值是否相同 ==比较引用数据类型  比较地址值

	if(this == anObject){
		return true;
	}
	//判断要比较的对象  是否是String类型   原因是Object类型多态可以传入任何类型的子类对象  猫,狗
	if(anObject  instanceOf String){
		//乡下类型转换  因为Object是父类  父类的引用无法直接使用子类的特有信息
		String  anotherString =(String) anObject;
		//获取this的字符数组长度 (String底层是char数组)
		int  n = value.length;
		// 获取anObject的字符数组长度  判断是否和this的字符数组长度相同
		if(n == anotherString.value.length){
		// 获取this的字符数组
			char  v1[] = value;
			 // 获取anObject的字符数组
			char v2[] = anotherString.value;
			//循环比较两个字符数组的每一个元素是否相同
			int i = 0;
			while(n-- != 0){
				//只要有不同内容   直接返回false
				if(v1[i] != v2[i]){
					return  false;
					i++;
				}
				return  true;
			}
		}
		return    false;
	}

}

3.了解getClass()和instanceof关键字的区别
class A
class B extends A

instanceof: 【本类对象和子类对象】
b instanceof A true
b instanceof B true

a  instanceof   A   true
a instanceof   B    false

getClass : 【只考虑本类对象】

bclass == Aclass  false
bclass == Bclass  true
aclass == Aclass  true
aclass == Bclass false
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值