/*
* 父类Animal,定义了三个方法,
* 其中eat(),scream()是等着
* 被子类重写的,animalFun()
* 是Animal自身的方法
*/
class Animal {
public void eat() {
System.out.println("我们吃各种各样的食物");
}
public void scream() {
System.out.println("我们不会说人类的语言");
}
public void animalFun() {
System.out.println("属于动物自已的方法");
}
}
/*
* 定义Dog类,继承Animal类,重写父类中的
* eat(),scream()方法,并有自已的dogFun()
* 方法
*/
class Dog extends Animal {
public Dog() {
System.out.println("=============创建一个狗的对象=================");
}
@override
public void eat() {
System.out.println("狗喜欢骨头");
}
@override
public void scream() {
System.out.println("汪汪汪");
}
public void dogFun() {
System.out.println("属于狗自已的方法");
}
}
/*
* 定义一个猫类和狗类一样
*/
class Cat extends Animal {
public Cat() {
System.out.println("=============创建一个猫的对象=================");
}
@override
public void eat() {
System.out.println("猫喜欢吃鱼");
}
@override
public void scream() {
System.out.println("喵喵喵");
}
public void catFun() {
System.out.println("属于猫自已的方法");
}
}
public class PolTest {
public static void main(String[] args) {
fun(new Cat());
fun(new Dog());
}
/*
*=============创建一个狗的对象=================
* 狗喜欢骨头
* 汪汪汪
* 属于动物自已的方法
*/
public static void testUpCast() {
//向上转型,把Dog当Animal用,只能调用Dog类中被重写了的方法
Animal animal = new Dog();
//调用的都是被重写的方法
animal.eat();
animal.scream();
//可以调用Animal类本身的方法,无法调用Dog自身的方法
animal.animalFun();
}
/*
* =============创建一个猫的对象=================
* 猫喜欢吃鱼
* 喵喵喵
* 属于猫自已的方法
* 属于动物自已的方法
*/
public static void testDownCast() {
//向下转型前,必须有向上转型
Animal animal = new Cat();
//把Animal当Cat用,Cat又是继承于Animal,所以可以调用所有的方法
//包括继承于父类的animalFun()方法
Cat cat = (Cat)animal;
cat.eat();
cat.scream();
cat.catFun();
cat.animalFun();
}
/*
* 多态的一种应用,很多时候我们不知道传来的对象是什么,但是都是继承
* 于某一个父类,根据传入对象的不同,动态的执行相应的方法
* fun(new Cat());fun(new Dog());执行结果
* =============创建一个猫的对象=================
* 猫喜欢吃鱼
* 喵喵喵
* 属于猫自已的方法
* =============创建一个狗的对象=================
* 狗喜欢骨头
* 汪汪汪
* 属于狗自已的方法
*/
public static void fun(Animal animal) {
animal.eat();
animal.scream();
//判断传入的是属于哪个对象的实例
//执行属于自已的方法
if(animal instanceof Dog) {
Dog dog = (Dog)animal;
dog.dogFun();
}
if(animal instanceof Cat) {
Cat cat = (Cat)animal;
cat.catFun();
}
}
}
我理解java的多态
最新推荐文章于 2026-06-13 11:00:21 发布
本文通过定义Animal基类及Dog、Cat派生类演示了Java中的多态性。具体介绍了如何通过向上转型和向下转型实现多态行为,以及如何在不了解具体对象类型的情况下,通过条件判断调用正确的对象方法。

5682

被折叠的 条评论
为什么被折叠?



