Java抽象类和接口
2015-08-06 20:06
218 查看
前天老师讲解类的继承、抽象类和接口突然被启发,以前总是用抽象类、接口、和继承什么的,没有思考过,为什么要这么设计,于是就上网查了查,做了做总结。
**1.可以完成所有子类的共性行为。
2.可以规定子类必须完成的行为。**
下面我们来看看如果父类不是抽象类会出现什么样子:
如果不使用抽象类的话,太消耗内存,很明显是不行的,。
那么抽象类到底是什么呢?通俗来讲,抽象类是对类的抽象,它不需要定义详细的动作执行过程,只需要定义这个动作就可以了,这也是抽象类存在的必要性之一。例如:一个动物类,动物都有eat方法(动作),但是动物的子类,老虎和猫,老虎是大口吃,猫是小口吃,这就不归它管了。
抽象类的特征:
一个抽象类动物,它的子类有猫和猪,他们都继承动物类。再来定义一个上树动作(方法),猫类可以实现这个动作,但是猪就不能实现这个动作,所以上树的动作是不可以放在抽象类动物中的。这里上树的这个动作就可以当做一个接口。但是这里的接口中的上树动作却没有详细定义的。猫实现上树接口是爬上去的,鸡实现上树接口是飞上去的。(接口是一个特殊形式的抽象类)
特征:实现接口的具体类必须要实现接口中的所有方法和属性(怎么实现你随便)。实现接口的抽象类会把未实现的方法,改成抽象方法。
抽象类:从对象中提取出他们的属性和方法,制作出的一个集合。(发现)
这里的方法是每个子类都必须实现的,或者说,都共有的,但是没有详细执行过程。
接口:指定一个动作,如果有哪个对象可以完成这个动作就可以实现。(创造)
这里的动作同样没有详细执行过程。比如说:飞这个动作,蚊子可以飞,超人也可以飞。但是他们飞的动作是不一
样的,蚊子是翅膀飞,超人是超能力飞。
抽象类
首先,Java的三大特性:封装、继承、和多态,抽象类这里肯定会用到继承的,那么把类变成抽象类有什么作用呢?**1.可以完成所有子类的共性行为。
2.可以规定子类必须完成的行为。**
下面我们来看看如果父类不是抽象类会出现什么样子:
class A { public A() { System.out.println("A"); } } class B extends A { public B() { System.out.println("B"); } } class C extends B { public C() { System.out.println("C"); } } class D extends C { public D() { System.out.println("D"); } } 测试类: public class Test { public static void main(String [] args) { new D(); /** * 此处只想生成一个对象 * 实际确把ABCD四个对象都放在内存了 */ } }
如果不使用抽象类的话,太消耗内存,很明显是不行的,。
那么抽象类到底是什么呢?通俗来讲,抽象类是对类的抽象,它不需要定义详细的动作执行过程,只需要定义这个动作就可以了,这也是抽象类存在的必要性之一。例如:一个动物类,动物都有eat方法(动作),但是动物的子类,老虎和猫,老虎是大口吃,猫是小口吃,这就不归它管了。
抽象类的特征:
1.抽象类不能被实例化。 一个动物你能怎么实例化,一颗植物也不能实例化。不可能说:我实例化一个动物,到底什么动物啊? 2.抽象方法必须被子类重写。 抽象方法就是从子类集合中提取出来的,也就是说,你继承这个类,你就必须满足要求。 3.一个类包含抽象方法,那么这个类一定是抽象方法。
接口
为什么要设计接口呢?接口就是对象方法特征的集合。接口是被实现的,类是被继承的。继承只能是一个,接口可以实现多个。例如:一个抽象类动物,它的子类有猫和猪,他们都继承动物类。再来定义一个上树动作(方法),猫类可以实现这个动作,但是猪就不能实现这个动作,所以上树的动作是不可以放在抽象类动物中的。这里上树的这个动作就可以当做一个接口。但是这里的接口中的上树动作却没有详细定义的。猫实现上树接口是爬上去的,鸡实现上树接口是飞上去的。(接口是一个特殊形式的抽象类)
特征:实现接口的具体类必须要实现接口中的所有方法和属性(怎么实现你随便)。实现接口的抽象类会把未实现的方法,改成抽象方法。
抽象类和接口的区别
从实际对象来看:抽象类:从对象中提取出他们的属性和方法,制作出的一个集合。(发现)
这里的方法是每个子类都必须实现的,或者说,都共有的,但是没有详细执行过程。
接口:指定一个动作,如果有哪个对象可以完成这个动作就可以实现。(创造)
这里的动作同样没有详细执行过程。比如说:飞这个动作,蚊子可以飞,超人也可以飞。但是他们飞的动作是不一
样的,蚊子是翅膀飞,超人是超能力飞。
抽象角度: 抽象类是对类的抽象。 接口是对行为的抽象。 共同点: 1.都不能被实例化。 2.都包含抽象方法。
相关文章推荐
- Java之猜字母小游戏
- Java 算法编程 N阶乘最后总位数问题
- struts2学习笔记(二)
- Java 算法编程 N阶乘末尾0的个数问题
- Java分布式相关
- java.io.IOException: open failed: EACCES (Permission denied)问题解决
- java集合框架(map集合)
- exlipse 项目不自动加载lib下的jar
- Spring AOP 学习之静态代理
- Opentaps(OFBiz)在Eclipse下调试配置
- [转]Spring配置之OpenSessionInViewFilter
- JAVA项目1:聊天
- Java之String类
- Java之正则表达式验证手机号码
- JDK1.7的新特性
- Java之正则表达式【实例解析】
- Java之正则表达式【使用语法】
- 使用java api操作Hadoop文件
- java工厂模式
- Struts2验证框架