day 12 2021 3 11从不同继承 多态 抽象类分别写猫与狗理解程序

本文通过Java代码示例介绍了如何使用继承和多态来实现猫和狗类的不同行为表现,包括基本属性设置和特定行为方法的重写。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

继承方法版的猫与狗

main

package com.wang.API.DogAndCat;

public class AnimalDemo {
    public static void main(String[] args) {
        //创建猫类对象
        Cat cat1 =new Cat();
        cat1.setName("加菲");
        cat1.setAge(1);
        System.out.println(cat1.getName()+cat1.getAge());
        cat1.catchMouth();

        Cat cat2 = new Cat("美短",2);
        System.out.println(cat2.getName()+cat2.getAge());

        //狗类创建
        Dog dog = new Dog("金毛",10);
        System.out.println(dog.getName()+dog.getAge());
        dog.lookDog();
    }
}

父类 Animal类

package com.wang.API.DogAndCat;

public class Animal {

    private String name;
    private int age;

    public Animal() {
    }

    public Animal(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

Dog类

package com.wang.API.DogAndCat;

public class Dog extends Animal{

    public Dog() {
    }

    public Dog(String name, int age) {
        super(name, age);
    }

    public void lookDog(){
        System.out.println("狗看门");
    }
}

Cat类

package com.wang.API.DogAndCat;

public class Cat extends Animal {
    public Cat() {
    }

    public Cat(String name, int age) {
        super(name, age);
    }

    public void catchMouth(){
        System.out.println("猫抓老鼠");
    }
}

多态版的猫与狗

main类

package com.wang.API.DogAndCat2;

public class AnimalDemo {
    public static void main(String[] args) {
        //猫类
        Animal cat1 = new Cat("加菲",5);
        System.out.println(cat1.getName()+ cat1.getAge());
        cat1.eat();

        //狗类
        Animal dog =new Dog("金毛",10);
        System.out.println(dog.getName()+ dog.getAge());
        dog.eat();
    }
}

Animal类

package com.wang.API.DogAndCat2;

public class Animal {
    private String name;
    private int age;

    public Animal() {
    }

    public Animal(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public void eat(){
        System.out.println("动物吃东西");
    }
}

Cat类

package com.wang.API.DogAndCat2;

public class Cat extends Animal{
    public Cat() {
    }

    public Cat(String name, int age) {
        super(name, age);
    }

    //重写父类中的eat方法
    @Override
    public void eat() {
        System.out.println("猫吃鱼");
    }
}

Dog类

package com.wang.API.DogAndCat2;

public class Dog extends Animal{

    public Dog() {
    }

    public Dog(String name, int age) {
        super(name, age);
    }

    @Override
    public void eat() {
        System.out.println("狗吃肉");
    }
}

抽象类

在Java中,一个没有方法体的方法被定义为抽象方法;而类中如果有抽象方法,那么该类必须被称为抽象类

抽象方法的创建

package com.wang.API.Demo.Demo1;

public abstract class Animal //抽象类 用abstract修饰
{

    //抽像方法 用abstract修饰
    public abstract void eat();
}
  • 抽象方法必须在抽象类中,抽象类中可以不存在抽象方法
  • 抽象类无法直接在main类中实例化,可以通过子类重写方法,从而实例化
  • 如果一个子类继承了抽象类,要么重写父类中的所有抽象方法,要么其本身就是定义为一个抽象类

举例:

main类

package com.wang.API.Demo.Demo1;

public class Demo1 {
    public static void main(String[] args) {
        Animal a = new Cat();
        a.eat();
    }
}

Animal类

package com.wang.API.Demo.Demo1;

public abstract class Animal //抽象类 用abstract修饰
{

    //抽像方法 用abstract修饰
    public abstract void eat();
}

Cat类

package com.wang.API.Demo.Demo1;

public class Cat extends Animal{
    @Override
    public void eat() {
        System.out.println("猫吃鱼");
    }
}

抽象类版本猫与狗

main类

package com.wang.API.DogAndCat3;

public class AnimalDemo {
    public static void main(String[] args) {
        //猫类测试
        Animal cat1 = new Cat("布偶",2);
        System.out.println(cat1.getName()+cat1.getAge());
        cat1.eat();

        //狗类测试
        Animal dog1 = new Dog("金毛",10);
        System.out.println(dog1.getName()+ dog1.getAge());
        dog1.eat();
    }
}

Animal类

package com.wang.API.DogAndCat3;

public abstract class Animal {
    private String name;
    private int age;

    public Animal() {
    }

    public Animal(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public abstract void eat();
}

Cat类

package com.wang.API.DogAndCat3;

public class Cat extends Animal{
    public Cat() {
    }

    public Cat(String name, int age) {
        super(name, age);
    }

    @Override
    public void eat() {
        System.out.println("猫吃鱼");
    }
}

Dog类

package com.wang.API.DogAndCat3;

public class Dog extends Animal{
    public Dog() {
    }

    public Dog(String name, int age) {
        super(name, age);
    }

    @Override
    public void eat() {
        System.out.println("狗吃肉");
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值