JAVA八股与代码实践----接口与抽象类的区别和用法

接口和抽象类的区别

关键字abstractinterface
实例化不能直接实例化不能直接实例化
方法可以有抽象和具体方法只能有抽象方法(Java 8+ 支持默认方法)
变量可以有普通变量只能有常量 (public static final)
继承单继承多继承
构造函数可以定义不允许定义
使用场景表示实体的共有特征定义行为的规范

抽象类:定义共同的特征(Cat和Dog都具有Animal的行为,所以可以定义一个Animal抽象类,包含动物的共同行为),比如以下代码

// 抽象类 Animal
abstract class Animal {
    String name;

    Animal(String name) { // 构造函数
        this.name = name;
    }

    // 抽象方法:子类必须实现
    abstract void makeSound();

    // 具体方法:所有子类共享
    void sleep() {
        System.out.println(name + " is sleeping.");
    }
}

// 子类:狗
class Dog extends Animal {
    Dog(String name) {
        super(name);
    }

    @Override
    void makeSound() {
        System.out.println(name + " says: Woof!");
    }
}

// 子类:猫
class Cat extends Animal {
    Cat(String name) {
        super(name);
    }

    @Override
    void makeSound() {
        System.out.println(name + " says: Meow!");
    }
}

// 测试类
public class Main {
    public static void main(String[] args) {
        Dog dog = new Dog("Buddy");
        Cat cat = new Cat("Whiskers");

        dog.makeSound();
        dog.sleep();

        cat.makeSound();
        cat.sleep();
    }
}

接口:定义某种行为规范,动物的某个行为作为一个接口,在实际业务中,某个功能服务会作为一个接口,代码示例:

// 接口:定义跑步行为
interface CanRun {
    void run();
}

// 接口:定义发出声音的行为
interface CanMakeSound {
    void makeSound();
}

// 狗类:实现跑步和发声行为
class Dog implements CanRun, CanMakeSound {
    String name;

    Dog(String name) {
        this.name = name;
    }

    @Override
    public void run() {
        System.out.println(name + " is running!");
    }

    @Override
    public void makeSound() {
        System.out.println(name + " says: Woof!");
    }
}

// 猫类:实现跑步和发声行为
class Cat implements CanRun, CanMakeSound {
    String name;

    Cat(String name) {
        this.name = name;
    }

    @Override
    public void run() {
        System.out.println(name + " is running!");
    }

    @Override
    public void makeSound() {
        System.out.println(name + " says: Meow!");
    }
}

// 测试类
public class Main {
    public static void main(String[] args) {
        Dog dog = new Dog("Buddy");
        Cat cat = new Cat("Whiskers");

        dog.run();
        dog.makeSound();

        cat.run();
        cat.makeSound();
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值