java抽象类和接口
来源:互联网 发布:淘宝运营培训班视频 编辑:程序博客网 时间:2024/06/13 12:58
关于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()这个方法,实现类必须重写这个方法,你就能够调用这个方法,而在实现类里面的方法就不能调用到了。我觉得面向接口开发的好处就是,只会向调用者提供我接口中的方法,至于实现类里面的方法你就不能调用到了,就相当于实现类自己的方法私有化
- Java 抽象类,抽象方法和接口
- Java抽象类和抽象方法、接口
- Java接口和抽象类
- java接口和抽象类
- java 接口和抽象类
- java接口和抽象类
- JAVA抽象类和接口
- java抽象类和接口
- java抽象类和接口
- Java:抽象类和接口
- java接口和抽象类
- Java 抽象类和接口
- JAVA抽象类和接口
- java抽象类和接口
- java接口和抽象类
- JAVA抽象类和接口
- Java抽象类和接口
- java 抽象类和接口
- android 使用自定义画布
- AndroidStudio集成极光推送
- [Hibernate]Hibernate4实体注解方法
- 设置cookie,跨域取值
- Android实现ListView异步加载图片
- java抽象类和接口
- Android艺术开发探索学习 之 测量view的宽高 以及 动态设置View的位置
- PHP,Mysql-根据一个给定经纬度的点,进行附近地点查询–合理利用算法,即附近的人
- 从这个类关系图中你可以看出什么?
- springBoot02 之json返回
- 解决Fragment相关问题,java-lang-illegalstateexception-activity-has-been-destroyed
- python3的input问题
- WinCE中命令行工具cvrtbin简介
- Android中webview的使用