抽象类和接口的区别

抽象类:
需要使用abstract关键字进行修饰,注意,这个类是抽象类,所有的方法都是抽象方法,不能new对象使用,如果一个子类继承父类抽象类,那么子类必须重写所有父类的抽象方法,如果子类没有将父类中的抽象方法全部重写,那么子类也必须是一个抽象类。
abstract修饰符:
1.abstract修饰的类为抽象类,此类不能有对象,(无法对此类进行实例化,说白了就是不能new);
2.abstract修饰的方法为抽象方法,此方法不能有方法体(就是什么内容不能有);
如何使用抽象类和抽象方法:
1、不能直接new创建抽象类对象。
2、必须用一个子类来继承抽象父类。
3、子类必须覆盖重写所有父类当中的抽象方法。
覆盖重写实现:去掉抽象方法的abstract关键字,然后补上大括号方法体。
4、创建子类对象进行使用
例如如下代码:
此时我们定义一个抽象方法,动物

public abstract class Animals {
    //这是一个抽象方法,代表吃东西,但是具体吃什么(大括号的内容)不确定。
    public abstract void eat();
    //这是一个普通的成员方法
    public void normMethid(){
    }
}

此时如果我们要使用该抽象类,那么必须对其进行继承并重写方法:

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

此时我们创建一个Cat对象,便可以调用方法了:

public static void main(String[] args) {
        Cat cat = new Cat();
        cat.eat();//猫吃鱼
    }

接口:
在任何版本的jdk当中,接口都能定义抽象方法。
public abstract 返回值类型 方法名称(参数列表);

注意事项:
1、接口当中的抽象方法,修饰符必须是两个固定的关键字:public abstract
2、这两个关键字,可以选择性的省略。(初学不推荐省略)
3、方法的三要素可以随意定义
对于一个接口,必须有一个实现类来完成相应的操作,如果接口中存在抽象方法,那么实现类必须对其进行重写。
接口就是一个规范和抽象类比较相似。它只管做什么,不管怎么做。例如现实生活中的USB接口,对应的实现类就是鼠标键盘等等
需要注意的是:
1.接口中的所有属性默认为:public static final ****;
2.接口中的所有方法默认为:public abstract ****;
3.实现接口的实现类使用implements 关键字进行实现
此时定义一个接口

public interface MyInterfaceAbstract {
    //这是一个抽象方法
    public abstract void test1();
    //这也是一个抽象方法
    public void test2();
    //这也是一个抽象方法
    abstract void test3();
    //这也是一个抽象方法
    void test4();
}

接口的实现类为:

public class Test implements MyInterfaceAbstract {

    @Override
    public void test1() {
        System.out.println("抽象方法1");
    }

    @Override
    public void test2() {
        System.out.println("抽象方法2");
    }

    @Override
    public void test3() {
        System.out.println("抽象方法3");
    }

    @Override
    public void test4() {
        System.out.println("抽象方法4");
    }
}

调用方法:

public static void main(String[] args) {
        Test test = new Test();
        test.test1();
        test.test2();
        test.test3();
        test.test4();
    }

我们知道,对于一个类而言,只能有唯一一个父类,也就是说,一个抽象类的子类只能继承一个抽象类,但是对于接口而言,一个实现类可以实现多个接口,好比现实中的USB接口,可以插在电脑上也可以插在打印机上。所以一个实现类可以implements A,B,C…多个接口,同样的一个接口类可以继承多个接口,但是抽象类不允许。
接口在jkd8以下可以使用的有:
1.常量(需要注意的是在接口中所有的属性的修饰符都默认为"public static final",即为常量,不可变)
2.抽象方法
jdk8以上可以使用的有:
3.默认方法
4.静态方法
jdk9以上可以使用:
5.私有方法
抽象类:
1、抽象类中可以定义任意数据类型的变量
2、抽象类中可以有抽象方法,也可以存在其他类型的方法
3、一个抽象类只能继承一个抽象父类

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值