java抽象类和接口

    xiaoxiao2021-12-14  20

    关于java抽象类,以前我一直不明白这个抽象类到底有什么作用,现在回想起来,抽象类应该生来就是用来被继承的,没有继承者的抽象类都没有意义,因为它不能new一个实例。

    想象一个场景:猫,狗,猴子等都是动物,在做对象设计的时候,可以定义一个他们的共性Animal类,将这个类定义为抽象的。

    Animal:

    public abstract class Animal{ public String behavior; public abstract void eat(); public abstract void drink(); public void showBehavior(){ System.out.println("我的行为:"+behavior) } }然后我们再定义一个代表猫的类,让他继承Animal,实现它的eat()和drink()方法。

    Cat:

    /** 猫类 */ public class Cat extends Animal{ /*-------实现animal抽象方法---------*/ public void eat(){ behavior = "我吃了鱼"; } public void drink(){ behavior = "我喝了鱼汤"; } }然后我们再定义一个代表狗的类,也让他继承Animal

    /** 狗类 */ public class Dog extends Animal{ /*-------实现animal抽象方法---------*/ public void eat(){ behavior = "我吃了骨头"; } public void drink(){ behavior = "我喝了骨头汤"; } } 我们写个Practise类测试一下;

    public class Practise{ public static void main(String [] args){ Animal animal = new Animal(); } }这里我先new一个Animal的实例,然后编译,毋庸置疑,它是不会编译通过的,这也说明了我前面讲的,没有继承者的抽象类毫无单独存在的意义。

    我在来写一个正常的

    public class Practise{ public static void main(String [] args){ Cat cat = new Cat(); cat.eat(); cat.showBehavior(); cat.drink(); cat.showBehavior(); Dog dog = new Dog(); dog.eat(); dog.showBehavior(); dog.drink(); dog.showBehavior(); } }

    编译运行上面的代码,会得到这样的结果:

    我的行为:我吃了鱼;

    我的行为:我喝了鱼汤;

    我的行为:我吃了骨头;

    我的行为:我喝了骨头汤;

    从以上的列子可以看出,抽象类的作用,首先,它可以定义抽象方法来定义其子类的行为,而且还可以定义子类的公用方法;我个人认为抽象类比接口的功能要多;

    关于接口呢?接口只能定义其实现类的公用行为,而不能定义方法;

    在平时的工作中,我们经常这样定义项目的目录结构

    --src

    ----controller

    ----dao

    ------impl

    ----service

    ------impl

    dao中先是定义一个接口,然后再impl中定义一个dao接口的实现类。

    service也是一个道理。

    在controller中实例化service接口

    这种结构的特点是什么呢?

    IUserService userService = new UserServiceImpl();

    userService.showUserBasicInfo();

    在接口中有showUserBasicInfo()这个方法,实现类必须重写这个方法,你就能够调用这个方法,而在实现类里面的方法就不能调用到了。我觉得面向接口开发的好处就是,只会向调用者提供我接口中的方法,至于实现类里面的方法你就不能调用到了,就相当于实现类自己的方法私有化

    转载请注明原文地址: https://ju.6miu.com/read-963483.html

    最新回复(0)