多态
多态:具有表现多种形态能力的特征,如;同一件事情做的不同过程 吃饭可以吃米饭 吃饼等其他食物这种过程称为多态
功能:减少代码使用,更好的优化代码,处理结构方便
使用:
(向上转型)自动转型
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 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();
Dog dog=(Dog)pet;
dog.strain="阿拉斯加";
}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
此关键字比较一个类是否和另一个类属于同一个类实例
强制转换会使用到
如: