Java抽象类和接口介绍

Java抽象类和接口介绍,第1张

Java抽象类和接口介绍

目录

1.抽象类

注意事项:

抽象类的作用

2.接口

实现接口:

总结


1.抽象类

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

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

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

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

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

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

注意事项:

1.抽象类不能实例化

Animal animal = new Animal();

2.抽象方法不能是private的

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

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

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/5605975.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-12-15
下一篇2022-12-15

发表评论

登录后才能评论

评论列表(0条)

    保存