java中的抽象类和抽象方法
2015-10-24 23:42
489 查看
使用关键字abstract定义的类叫做抽象类,在抽象类中可以包含抽象方法也可以不包含抽象方法,这意味着你在抽象类里边可以有具体的方法(有实现体)也可以有抽象方法(没有实现,没有括号,跟着分号)。抽象方法不能被实例化(不能创建抽象类的对象)
抽象类的声明:
在class前边加上abstract关键字,就使得这个类变成抽象类,看下边的代码:
因为抽象类允许创建具体的方法,因此,它并不是100%的抽象,你可以说它是提供了部分的抽象,而接口提供的100%的抽象。
记住下边这两条规则:
1、如果一个类有很少的抽象方法和具体方法,那么就声明一个抽象类。
2、如果一个类只有抽象方法,那就就声明一个接口。
像我们之前讨论的,不能初始化一个抽象类,下边的代码抛出一个异常错误:
输出:
Unresolved compilation problem: Cannot instantiate the type AbstractEx1
注意:这个类继承自抽象类,就必须实现这个抽象类的抽象方法,否则,这个类也可以被声明为抽象类
为什么我们需要一个抽象类:
让我拿一个例子来说明这个问题,假设这里有一个Animal类,和一些其他类比如cat类、dog类、还有Horse类,这些类继承自Animal类,所以也就又很少的共同的习惯,现在你应该了解了那些上边那些类的用途,并且明白创建一个Animal类是没有什么意义的,因为你不能判断这个Animal类代表的是那个Animal,因此对于这种情况,我们创建一个抽象类然后再创建具体的类,然后相应的重写对应的方法,并且可以创建自己的方法。
抽象和具体的比较:
一个不是抽象类的类被称为是具体类,在上边的例子中,我说明了什么是Animal是抽象类,其他那三个是具体类。
关键的点是:
1、一个抽象类没有什么用,除非被其他的继承。
2、如果你在一个类里边定义了一个抽象方法,那么你也必须把这个类定义为抽象类,你不能在一个不是抽象类的类里边有抽象方法,翻过来却不一定是对的:一个类没有任何的抽象方法也可以被声明为抽象类、
3、抽象类可以没有抽象或者具体方法
好了,我们已经在上边讨论了一些抽象方法,下边我们来看一些简单的例子来更深的理解这个问题。
语法:
对于抽象方法,我们需要记住的一些关键点:
1、抽象方法没有实现体
2、声明使用冒号结束
3、它必须是能够被重写的,一个抽象类必须能够被继承,同样的抽象方法必须是能够被重写的。
4、抽象方法必须要在抽象类中
注意:继承自抽象类的类必须要实现或者是重写所有的抽象方法
抽象类和抽象方法的例子:
输出:
抽象类的声明:
在class前边加上abstract关键字,就使得这个类变成抽象类,看下边的代码:
// Declaration using abstract keyword abstract class AbstractDemo{ // Concrete method: body and braces public void myMethod(){ //Statements here } // Abstract method: without body and braces abstract public void anotherMethod(); }
因为抽象类允许创建具体的方法,因此,它并不是100%的抽象,你可以说它是提供了部分的抽象,而接口提供的100%的抽象。
记住下边这两条规则:
1、如果一个类有很少的抽象方法和具体方法,那么就声明一个抽象类。
2、如果一个类只有抽象方法,那就就声明一个接口。
像我们之前讨论的,不能初始化一个抽象类,下边的代码抛出一个异常错误:
abstract public class AbstractDemo{ public void myMethod(){ System.out.println("Hello"); } abstract public void anotherMethod(); } public class ConcreteDemo{ public void anotherMethod() { System.out.print("Abstract method"); } public static void main(String args[]) { //Can't create object of abstract class - error! AbstractDemo obj = new AbstractDemo(); obj.display(); } }
输出:
Unresolved compilation problem: Cannot instantiate the type AbstractEx1
注意:这个类继承自抽象类,就必须实现这个抽象类的抽象方法,否则,这个类也可以被声明为抽象类
为什么我们需要一个抽象类:
让我拿一个例子来说明这个问题,假设这里有一个Animal类,和一些其他类比如cat类、dog类、还有Horse类,这些类继承自Animal类,所以也就又很少的共同的习惯,现在你应该了解了那些上边那些类的用途,并且明白创建一个Animal类是没有什么意义的,因为你不能判断这个Animal类代表的是那个Animal,因此对于这种情况,我们创建一个抽象类然后再创建具体的类,然后相应的重写对应的方法,并且可以创建自己的方法。
抽象和具体的比较:
一个不是抽象类的类被称为是具体类,在上边的例子中,我说明了什么是Animal是抽象类,其他那三个是具体类。
关键的点是:
1、一个抽象类没有什么用,除非被其他的继承。
2、如果你在一个类里边定义了一个抽象方法,那么你也必须把这个类定义为抽象类,你不能在一个不是抽象类的类里边有抽象方法,翻过来却不一定是对的:一个类没有任何的抽象方法也可以被声明为抽象类、
3、抽象类可以没有抽象或者具体方法
好了,我们已经在上边讨论了一些抽象方法,下边我们来看一些简单的例子来更深的理解这个问题。
语法:
public abstract void display();
对于抽象方法,我们需要记住的一些关键点:
1、抽象方法没有实现体
2、声明使用冒号结束
3、它必须是能够被重写的,一个抽象类必须能够被继承,同样的抽象方法必须是能够被重写的。
4、抽象方法必须要在抽象类中
注意:继承自抽象类的类必须要实现或者是重写所有的抽象方法
抽象类和抽象方法的例子:
abstract class Demo1{ public void disp1(){ System.out.println("Concrete method of abstract class"); } abstract public void disp2(); } class Demo2 extends Demo1{ /* I have given the body to abstract method of Demo1 class It is must if you don't declare abstract method of super class compiler would throw an error*/ public void disp2() { System.out.println("I'm overriding abstract method"); } public static void main(String args[]){ Demo2 obj = new Demo2(); obj.disp2(); } }
输出:
I'm overriding abstract method
相关文章推荐
- Java学习记录:文件的输入输出流
- Java实现从正方教务系统抓取数据(二)--验证码识别
- Spring学习笔记(二)
- Spring实现AOP的4种方式
- Java对象及其引用
- java.lang.OutOfMemoryError: PermGen space及其解决方法
- Stackoverflow上人气最旺的10个Java问题
- JavaWeb-JSP 请求转发和请求重定向
- Struts标签、Ognl表达式、el表达式、jstl标签库这四者之间的关系和各自作用
- SpringIoC初始化BeanDefinition解析——注册
- Java计算圆周率
- Spring事务配置的5种方式
- Java实现二叉树的构建与遍历
- 从头认识java-3.1 for each
- 从头认识java-3.1 for each
- Java Web 技术整合基础篇1 web产生及发展
- 实际项目中页面标签的使用
- 从头认识java-2.6 逗号操作符
- 从头认识java-2.6 逗号操作符
- JAVA大数运算