多态 from zero

多态
多态:具有表现多种形态能力的特征,如;同一件事情做的不同过程  吃饭可以吃米饭  吃饼等其他食物这种过程称为多态
 功能:减少代码使用,更好的优化代码,处理结构方便
使用:
 (向上转型)自动转型
1 父类做类型子类实例化
 Pet pet =new Dog( ); //基本用法
public class Pet{
 public void show(){
System.out.println("宠物的信息");

}
}
public class Dog extends Pet{
  public void show(){
      System.out.println("狗狗的信息");

}
}
public class Text{
public static void main(String [] args){
Pet pet =new Dog( );
pet.show();
}
}
此次输出的为狗狗的信息,不是宠物的信息



2 父类做形参,子类做实参
public class Pet {
public void eat(){
	
	System.out.println("宠物正在吃");
}
}
public class Dog extends Pet{
public void eat(){

System.out.println("狗狗正在吃狗粮");
}
}
public class Cat extends Pet{
public void eat(){

System.out.println("小猫正在吃鱼");
}
}
public class User{
public void feed(Pet pet){
   pet.eat();
/*
public void feed(Dog dog){
   dog.eat();
public void feed(Cat cat){
   cat.eat();


*/


}

}







public class Text{
public static void main(String [] args){
Dog dog=new dog( );
User p=new User( );
p.feed(dog);



}
}

输出结果为狗狗正在吃狗粮
利用父类做形参 子类做实参实现的,根据题意传入的狗狗 和小猫需要完成两个方
一个给狗狗喂养一个给小猫喂养 当参数设计成宠物对象,可节省代码量,完成
代码 优化

     (向上转型)强制转换
强制转换 子类在前父类在后(小转大)
 3 
父类做返回参数

public Pet cin(int i){
Pet pet=null;
if(i==1){
pet=new Dog();
//strain 为狗狗的私有属性 用pet调用不到 所以采用强制转换
Dog dog=(Dog)pet;
dog.strain="阿拉斯加";
//此时查看狗狗的信息 用pet .   , dog  .  都可以调用原因在下
}else if(i==2){
pet =new Cat();
}
return pet;
}
原因:strain不是父类Pet的属性 是Dog特有的属性所以不能调用 把pet强制转换成
 Dog类 在赋值即可 ;用pet . 调用显示信息方法会显示出strain 赋值信息
 原因如下
数据类型分为:基本数据类型和引用数据类型
在此原因为引用数据类型


强制转换后类型的转化不是等于 而是指针的指向
如:Pet D1=new Pet( );
Pet D2=new Pet( );  D1=D2;
是把D2的指针指向D1的数据元素


向下强制转换 
会用到关键字 :instanceof
此关键字比较一个类是否和另一个类属于同一个类实例
强制转换会使用到
如:
/**
宠物玩的方法
传入宠物类型
/
public void comeplay(Pet1 pet){
	if(pet instanceof Dog1){
		Dog1 dog=(Dog1)pet;
		dog.ball();
	}else if(pet instanceof pengiun1){
		pengiun1 peng=(pengiun1)pet;
		peng.swming();
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值