`

一阶段-EighthWork-1-字符流+缓冲流

 
阅读更多
/*
定义一个宠物类(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()
    {    }
}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics