Java抽象类和接口介绍

本文详细介绍了Java中的抽象类和接口,包括它们的概念、使用场景和注意事项。抽象类用于抽象共性,不能实例化,而接口则更纯粹,只包含抽象方法,提供多继承功能。通过示例代码展示了如何定义和实现抽象类和接口,以及它们在实际开发中的作用。
摘要由CSDN通过智能技术生成

目录

1.抽象类

注意事项:

抽象类的作用

2.接口

实现接口:

总结


1.抽象类

在回答这个问题之前,我们先来回忆一下什么是

class Animal {
    public void eat() {
       System.out.println("这是一个普通类中的普通方法!");
    }
}

接下来做一些小小的改变,注意看!!

abstract class Animal {
    abstract public void eat();
}

发现了有什么变化吗?我们在类和方法的前面加上了abstract代表这个类或方法是一个抽象类/抽象方法,并且这个方法没有用大括号具体的实现,是因为抽象方法不能执行具体的代码

概念:抽象类/抽象方法就是从多个事物中将共性抽取出来,所以他们存在的意义就是被继承。抽象类本身不能实例化,想要使用,只能创建抽象类的子类,然后让子类重写抽象类中的抽象方法。

注意事项:

1.抽象类不能实例化

Animal animal = new Animal();
/*编译出错:
java: Animal是抽象的; 无法实例化*/

2.抽象方法不能是private

abstract public class Animal {
    abstract private void eat();
}
/*编译出错:
java: 非法的修饰符组合: abstract和private*/

3.抽象类中可以包含其他的非抽象方法,也可以包含字段,这个非抽象类方法和其他普通方法规则一样,可以被重写,也可以被子类直接调用

abstract public class Animal {
    abstract public void eat();
    public void func() {
        System.out.println("func()执行了");
    }
}
public class Dog extends Animal{
    public void eat() {
        System.out.println("Dog is eating");
    }
}
public class Test {
    public static void main(String[] args) {
        Animal animal = new Dog();
        animal.func();
    }
}

执行结果: func()执行了

抽象类的作用

使用抽象类的场景就如上面的代码, 实际工作不应该由 父类 完成, 而应由 子类 完成. 那么此时如果不小心误用成 父类 了, 使用普通类编译器是不会报错的. 但是父类是 抽象类 就会在 实例化 的时候提示错误, 让我们尽早发现问题,充分利用编译器的 校验 , 在实际开发中是非常有意义的。

2.接口

接口是抽象类的更进一步,抽象类中还可以包含非抽象字段,而接口中包含的方法都是抽象方法,字段只能包含静态常量

1.使用interface定义一个接口

2.接口中的方法一定是抽象方法,因此可以省略abstract

3.接口中的方法一定是public,因此可以省略public

4.一个类使用implements继承接口,此时表达的含义是“实现”

5.接口不能单独被实例化

public interface IRunning {
    void run();
}
public interface ISwimming {
    void swim();
}
提示:创建接口时一般以大写字母 I 开头,接口一般使用 形容词命名

实现接口:

abstract public class Animal {
    protected String name;
    public Animal(String name) {
        this.name = name;
    }
}
public class Dog extends Animal implements IRunning{
    public Dog(String name) {
        super(name);
    }
    public void run() {
        System.out.println(name+" is running");
    }
}
public class Fish extends Animal implements ISwimming{
    public Fish(String name) {
        super(name);
    }
    public void swim() {
        System.out.println(name+" is swimming");
    }
}
public class Duck extends Animal implements IRunning, ISwimming {
    public Duck(String name) {
        super(name);
    }
    public void run() {
        System.out.println(name+" is running");
    }
    public void swim() {
        System.out.println(name+" is swimming");
    }
}

上面的代码展示了,一个类继承一个父类,同时实现一个或多个接口。

内容为狗属于动物,并且会跑;鱼属于动物,并且会游泳;鸭子属于动物,既会跑又会游泳。

总结

抽象类和接口都是Java中多态的使用方式,核心区别是抽象类可以包含普通方法和普通字段,这样的普通方法和普通字段可以被子类直接使用(不必重写),而接口中不能包含普通方法,子类必须重写所有的抽象方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

久留不见i

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值