多态
多态:具有表现多种形态能力的特征,如;同一件事情做的不同过程 吃饭可以吃米饭 吃饼等其他食物这种过程称为多态
功能:减少代码使用,更好的优化代码,处理结构方便
使用:
(向上转型)自动转型
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(); } }