Java三大特性之多态

如何实现多态

使用父类作为方法的返回值

现有宠物类(父类)、狗狗类(子类)、猫咪类

//动物类 (父类)
public class Pet{
	//定义一个抽象方法,要求子类重写  表示宠物在吃东西
	public abstract void eat();
}
//狗狗类  (子类)
public class Dog extends Anmail{
	//重写吃的方法
	@Override
	public void eat(){
		System.out.println("狗狗在吃东西");
	}
}
//猫咪类 (子类)
public class Cat extends Anmail{
	//重写吃的方法
	@Override
	public void call(){
		System.out.println("猫咪在吃东西");
	}
}

再添加一个主人类,让主人可以喂养宠物

//主人类
public class Master{
	//方法:主人喂养宠物
	//喂养狗狗
	public void feed(Dog dog){
		dog.eat();
	}
	//喂养猫咪
	public void feed(Cat cat){
		cat.eat;
	}
	
}

细想,现在只有两种动物,如果有n个动物那就要在主人类里写n个feed方法,这会大大增加代码量。
这里就可以使用多态的第一种实现方式:“使用父类作为方法的形参”来解决。
就是将Pet(父类)作为feed方法的参数。

//主人类
public class Master{
	//喂养宠物        把父类作为方法的参数
	public void feed(Pet pet){
	pet.eat();
	}
}

创建对象时:
把子类的对象包装成父类的类型(向上转型)
语法为:父类 对象名 = new 子类();
这里属于自动类型转换

//测试类
public class Test1{
	public static void main(String[] args) {
		//把dog对象包装成pet类型
		Pet pet1 = new Dog();
		//把cat对象包装成pet类型
		Pet pet2 = new Cat();
		//创建主人对象
		Master master = new Master();
		//将包装好的pet传入主人类的喂养方法
		master.feed(pet1);
		master.feed(pet2);
		
		/*
		*运行后控制台输出:
		*狗狗的吃东西
		*猫咪在吃东西
		*/
	}
}

使用父类作为方法的返回值

主人还可以领养宠物

//主人类
public class Master{
	//领养宠物
	//领养狗狗
	public Dog getDog(){
		Dog dog = new Dog();
		return dog;
	}
	//领养猫咪
	public Cat getCat(){
		Cat cat = new Cat();
		return cat;
	}
}

和上面喂养一样,宠物多了的话,也会大大增加代码量
这种情况就可以用多态的第二种实现方式:使用父类作为方法的返回值
将方法的返回值改为父类Pet

//主人类
public class Master{
	//将父类作为领养方法的返回值
	public Pet getPet(int petType){
		Pet pet=null;
		//如果为1,领养的是狗狗;为2,领养的是猫咪
		if(petType==1){
			pet = new Dog();
		}else if(petType==2){
			pet = new Cat();
		}
	}
}

测试领养方法,由主人自己选择需要领养的宠物

import java.util.Scanner;
public class Test2 {

	public static void main(String[] args) {
		//扫描器
		Scanner input=new Scanner(System.in);
		//创建主人对象
		Master master=new Master();
		System.out.println("欢迎来到宠物商店!请选择要领养的宠物类型:1.狗狗2.猫咪");
		//创建一个pet对象来接收getPet方法的返回值
		Pet pet=master.getPet(input.nextInt());
		// instanceof  判断一个对象是否属于一个类型 
		if (pet instanceof Dog){  //判断pet对象是否是一个Dog类型
			System.out.println("领养了狗狗");
		}else if (pet instanceof Cat){  //判断pet对象是否是一个Cat类型
			System.out.println("领养了猫咪");
		}else {
			System.out.println("领养失败");
		}
	}

}

向上转型和向下转型

向上转型

1.语法:父类 对象名 = new 子类();
2.属于自动类型转换
3.通过向上转型创建的对象,只能调用父类和子类共有的方法,如果此方法在子类中重写,则调用的是子类中重写过的方法

向下转型

1.语法:子类 对象名 = (子类)包装的对象名
2.属于强制类型转换
3.通过向下转型创建的对象,可以调用子类和父类中的任意方法

instanceof关键字

用来判断一个对象是否是一个类的实例
语法:对象名 intstanceof 类
返回值为boolean类型

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,关于Java实验三继承和多态,我可以为您提供一些基本的知识点和例子。 在Java中,继承是一种重要的面向对象编程概念,它允许一个类(称为子类或派生类)继承另一个类(称为父类或基类)的属性和方法。子类可以使用父类中的属性和方法,也可以添加自己的属性和方法。多态是指同一种类型的对象,在不同的情况下会表现出不同的行为。在Java中,多态可以通过方法重载和方法重写来实现。 下面是一个简单的例子,演示了如何使用继承和多态: ``` // 定义一个动物类 class Animal { public void makeSound() { System.out.println("动物发出声音"); } } // 定义一个狗类,继承自动物类 class Dog extends Animal { @Override public void makeSound() { System.out.println("狗发出汪汪声"); } } // 定义一个猫类,继承自动物类 class Cat extends Animal { @Override public void makeSound() { System.out.println("猫发出喵喵声"); } } // 测试多态 public class Test { public static void main(String[] args) { Animal animal1 = new Dog(); Animal animal2 = new Cat(); animal1.makeSound(); // 输出:狗发出汪汪声 animal2.makeSound(); // 输出:猫发出喵喵声 } } ``` 在上面的例子中,我们定义了一个Animal类,它有一个makeSound()方法。然后我们定义了一个Dog类和一个Cat类,它们都继承自Animal类,并重写了makeSound()方法。最后,在测试类中,我们创建了一个Animal类型的变量animal1和animal2,分别指向Dog对象和Cat对象。由于多态的特性,animal1和animal2都可以调用makeSound()方法,但是它们实际上调用的是Dog类和Cat类中重写的makeSound()方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值