S2—java多态

猫在裙角. 2020-03-01 12:40:17
一.多态
形式1) 父类做形参,子类做实参
public void feed(父类名 对象名){
对象名.方法名();
}
实例化类的对象名.feed(子类对象名)

形式2.) 父类做引用类型,子类实例化 (向上转型 自动类型转换)
父类名 对象名 = new 子类名();

形式3.) 父类作为方法返回值,子类实例化 自动类型转换)
二.重写方法
1)位置: 子类和父类有同名的方法
2). 方法名相同,返回类型和修饰符相同,方法体不同


三.instanceof 作用及使用
子类转换父类:向上转型 自动转换
父类转换子类: instanceof (向下转型 强制转换)


总结:
多态可以减少类中代码量, 可以提高代码的可扩展性和可维护性

向上转型一- 子类转换为父类
自动进行类型转换
向下转型一 父类转换为子类
结合instanceof运算符进行强制类型转换

/*
* 代码板块
*/

/*
* 父类Pet
* */

public class Pet {
public void eat(){
System.out.println("Pet正在吃东西");
}
}


/*
* 子类Dog
* */

public class Dog extends Pet {

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


//主人和宠物玩的行为
public void catchdisk(){
System.out.println("狗狗玩飞盘");
}
}


/*
* 子类Penugin
* */

public class Penugin extends Pet {
public void eat(){
System.out.println("企鹅正在吃鱼");
}


//主人和宠物玩的行为
public void swiming(){
System.out.println("企鹅在游泳");
}
}



/*
* 主人类Master
* */

public class Master {

//多态形式1: 父类做形参,子类做实参
public void feed(Pet pet){ //用父类作为形参 接收子类的实参
pet.eat();
}


//领养宠物
//多态形式3: 父类作为方法返回值,子类实例化 (类型自动转换)

public Pet getpet(int id){
Pet pet=null;
if (id==1){
pet=new Dog();
}else if (id==2){
pet = new Penugin();
}
return pet;
}


//主人和宠物玩的行为
public void play(Pet pet){
if ( pet instanceof Dog){
//如果父类对象是Dog类 就转换
Dog dog = (Dog)pet; //向下转型
dog.catchdisk();
}else if (pet instanceof Penugin){
//如果父类对象是Penugin类 就转换
Penugin penugin =(Penugin)pet;
penugin.swiming();
}
}

}



import java.util.Scanner;
/*
* 测试类Test
* */

public class Test {
public static void main(String[] args){

//多态形式1: 父类做形参,子类做实参
Pet pet = new Pet();
Dog dog = new Dog();
Penugin penugin = new Penugin();

Master ms = new Master();
ms.feed(pet);
//将Penugin作为实际参数传过去
ms.feed(penugin); //将Penugin作为实际参数传过去
ms.feed(dog); //将Dog作为实际参数传过去

//多态形式2: 父类做引用类型 子类实例化
Pet pet2 = new Dog(); //父类转换子类(向上转型 自动转换)
pet2.eat();

//领养宠物方法
//多态形式3: 父类作为方法返回值,子类实例化 (类型自动转换)

System.out.println("请选择你要领养的宠物:1.狗狗 2.企鹅");
Scanner input = new Scanner(System.in);
int cw=input.nextInt();
Master dx = new Master();
Pet pets = dx.getpet(cw);
pets.eat();

dx.play(dog);
dx.play(penugin);

}
}
...全文
5 点赞 收藏 回复
写回复
回复
切换为时间正序
请发表友善的回复…
发表回复

还没有回复,快来抢沙发~

发帖
非技术区
创建于2007-09-28

2.3w+

社区成员

Java 非技术区
申请成为版主
帖子事件
创建了帖子
2020-03-01 12:40
社区公告
暂无公告