Java:抽象类和接口的区别

可能你们是被标题吸引过来的,想知道接口和抽象类之间的区别 ,这个问题也是面试经常被问到的问题,但是我想说的是,如果想知道他们俩的区别,可以看看下面链接的文章,我这里写的是一些好玩的东西。

你们看这个过程就可以了。

一、了解抽象类

首先我们定义一个Dog类,都知道这样是可以的,如何我们实例化一个Dog对象,那么调用他的barking就可以输出"这是犬吠方法"。

public class Dog {
    
    
    public void barking(){
    
    
        System.out.println("这是犬吠方法");
    }
}

我们新建一个HuskyDog(就是哈士奇)类,他去继承这个Dog类,

public class HuskyDog extends Dog{
    
    
}
public class HuskyDog extends Dog{
    
    
    @Override
    public void barking() {
    
    
        System.out.println("这是哈士奇的犬吠方法");
    }
}

这样子你可以实现Dog的braking方法,也可以不实现这个方法,都是没有问题的。
但是我想在普通类中定义一个方法,不写方法体的时候,这就报错了。说是需要方法体,或者将方法给为抽象方法。
在这里插入图片描述

改成抽象方法后,又有问题了,说抽象方法需要在抽象类中。然后我把Dog改成抽象类了。
在这里插入图片描述

但是HuskyDog中有报错,说是需要实现这个running接口在这里插入图片描述
最后被迫营业。

public class HuskyDog extends Dog{
    
    
    @Override
    public void running() {
    
    
        System.out.println("这是二哈的Running方法");
    }

    @Override
    public void barking() {
    
    
        System.out.println("这是哈士奇的犬吠方法");
    }
}

我又定义了一个抽象类SmallDog,里面有一个bite方法。

public abstract class SmallDog {
    
    
    public abstract void bite();
}

然后我让HuskyDog继承这个SmallDog,出现了错误,说:Class 'HuskyDog' must either be declared abstract or implement abstract method 'bite()' in 'SmallDog',大概的意思就是说HuskyDog有多个抽象接口。所有说抽象类不能多继承。

二、了解接口

我这里定义两个接口,一个是 Animal, 里面有一个getName()的方法,一个是SmallAnimal接口,里面有 一个group()的方法。

public interface Animal {
    
    
    public void getName();
}
public interface SmallAnimal {
    
    
    public void group();
}

然后同时让HuskyDog实现,是没有问题的,实现接口方法就可以了。但是我后面想在这个接口里面定一个 私有的getAge()方法,给他写方法体的时候,有这样的错误:Interface abstract methods cannot have body,Modifier 'private' not allowed here
,前面说的是接口不能有方法体,后面说的是private不允许在这里使用。

扫描二维码关注公众号,回复: 12418836 查看本文章

三、说说缘由

我为什么要写这个文章呢,我有点记不清楚了,隐约记得是问:下面那些类可以继承(具体的我记不清楚了),我当时还有一个疑惑,说抽象类能不能继承,我当时只知道,类可以继承,不知道抽象类能不能继承(是不是很傻),然后下来才知道,我们经常说的抽象类和接口的区别,说的就是抽象类。我人傻了。
所以才有这样一遭。也是可以的。

四、接口和抽象类的区别

我也说一下抽象类和接口的区别吧,我问了很多同学说:“你面试的时候,面试官问了你什么问题?”因为大多数都是搞java的,他们大多数给我的回答是 抽象类和接口有什么区别。这样说你们应该懂了吧。

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_41288824/article/details/109633208