/*
定义一个宠物类(Pet),它有两个方法:叫cry(),吃东西eat(),定义宠物的子类狗(Dog),猫(Cat),覆盖父类的cry(),eat()方法,
里面写System.out.println("猫吃了鱼")这样的打印语句,另外狗有自己的方法看门guardEntrance(),猫自己独有的方法捉老鼠huntMice()
定义一个Test类,在main中定义两个Pet变量,pet1,pet2,采用引用转型实例化Dog,Cat,分别调用Pet的cry(),eat();
* (2)将Pet引强制转换为具体的Dog,Cat,在调Dog的guardEntrance(),Cat的huntMice()(提示:先用instanceof进行类型判断)
* (3)(思考)修改Test类,添加喂养宠物feedPet(Pet pet)的方法,在feedPet中调cry(),eat()方法,实例化Test类,再实例化狗 Dog dog = new Dog(),
猫 Pet cat = new Cat(), Test分别调feedPet()方法分别传参数cat,dog,思考这两种方式的异同,深入理解引入转型和多态
*/
package EighthWork;
/**
*
* @author Administrator
*/
public abstract class PetTest
{
//这里体现的是多态的实现机制,通过传入参数的对象不同来实现多态
public void feedPet(Pet pet)
{
System.out.print("n");
pet.cry();
pet.eat();
}
public static void main(String[] args)
{
//采用转型实例化Dog和Cat
//属性和方法的调用是不同的,属性跟着父类引用的类型一致,方法与实例的引用一致
//也就是属性是在编译时就由父类决定 ,方法在由运行时决定
Pet pet1 = new Dog();
pet1.cry();
pet1.eat();
pet1 = new Cat();//实现动态多态的要求:继承、实例名字相同、
pet1.cry();
pet1.eat();
//将Pet强制转换为具体的Dog和Cat
// Pet pet1 = new Dog();
// Pet pet2 = new Cat();
// if(pet1 instanceof Dog)
// {
// Dog dog = (Dog)pet1;
// dog.guardEntrance();
// }
// if(pet2 instanceof Cat)
// {
// Cat cat = (Cat)pet2;
// cat.huntMice();
// }
//通过传递对象参数的引用实现多态
// PetTest petTest = new PetTest();
// Dog dog = new Dog();
// Pet cat = new Cat();
// petTest.feedPet(dog);
// petTest.feedPet(cat);
}
}
============================================
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package EighthWork;
/**
*
* @author Administrator
*/
public abstract class Pet
{
public void cry() //抽象类中也允许有非抽象方法
{
System.out.print("宠物在叫");
}
public void eat()
{
System.out.print("宠物在吃");
}
//抽象类都是应用于继承,子类应该重写抽象类中所有的抽象方法
public abstract void PetEat();
}
========================================
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package EighthWork;
/**
*
* @author Administrator
*/
public class Dog extends Pet
{
public Dog()
{
System.out.println("养了一只狗");
}
public void cry()
{
System.out.println("狗的叫声:汪汪...");
}
public void eat()
{
System.out.println("狗啃了一根骨头");
}
public void guardEntrance()
{
System.out.println("宠物狗在看门");
}
public void PetEat()
{
}
}
=======================================
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package EighthWork;
/**
*
* @author Administrator
*/
public class Cat extends Pet
{
public Cat()
{
System.out.println("养了一只猫");
}
public void cry()
{
System.out.println("猫在叫:喵喵...");
}
public void eat()
{
System.out.println("猫吃了一条鱼");
}
public void huntMice()
{
System.out.println("宠物猫抓了一只老鼠");
}
public void PetEat()
{ }
}
相关知识
美国倍酷奶粉为什么可以做到零天替代母乳【领养宠物吧】
学宠物训犬师培训课程内容有哪些
ZL-013B小动物实验跑步机/大鼠实验跑台/小鼠平板跑步机
《幻唐志》黄眉大仙BOSS挑战思路与攻略汇总:《幻唐志》官网新闻资讯中心
宠喵club商城
宠物培养指南 千万不要错过这些宠物
武汉派多格宠物学校
8个方面,教你如何完美照顾刚做完绝育手术的猫主子!
一模分数=高考成绩?如何正确对待高三一模,稍不注意高考吃大亏
许昌宠物美容技术学习,训犬师培训
网址: 一阶段 https://m.mcbbbk.com/newsview299826.html
上一篇: 申兴海 |
下一篇: 虚拟宠物猫(java) |