最近开始学习java,由于有过oc,c++语言的基础,学习期java来相对比较轻松,这也验证了一句话,面向对象的语言基本上是相通到的。下面我们进入正题。
抽象类和接口是面向对象程序设计的两种十分重要的机制,与类比较,是更高层次的抽象,两者在本质上具有相似之处。
抽象类
在面向对象的程序设计中,所有对象都是通过类来描述的(java是一门纯面向对象的编程语言),但并不是所有类都是用来描述对象的。一个类中没有包含足够的信息来描述一个具体的对象,我们称这样的类为抽象类。
下面来看一下在java中是如何定义一个抽象类的:
<#这里是访问权限#> abstract class <#这里是类名#>{ //通过abstract关键字来定义一个 类为抽象类
<#这里是访问权限#> <#这里是参数类型#> <#这里是参数名#>;//参数声明
<#这里是访问权限#> abstract <#这里是函数返回值类型#> <#这里是函数名#> (<#形参列表#>);//声明方法,注意要用abstract关键字修饰且没有方法体
}
java中抽象类有以下几种使用规则:
1.abstract关键字可以修饰方法以及类,被abstract关键字修饰的类即抽象类,同样被abstract关键字修饰的方法就是抽象方法,抽象方法只有方法的声明,没有方法体,这是要特别注意的;
2.抽象类无法实例化一个对象,只能声明引用变量(设Animal是一个抽象类那么 Animal animal;这是合法的但是 Animal animal = new Animal();这样写是非法的);
3.含有抽象方法的类必须声明为抽象类,抽象类可以不含有抽象方法;
4.定义抽象类的主要目的是在定义新类时继承该抽象类。通过继承由其子类来发挥作用,当子类继承时,必须实现抽象类中的所有抽象方法,否则子类也要声明成抽象类。
下面我们来看一个运用抽象类的例子:
/**
* Animal类,所有动物类的抽象父类
*
*
*/
public abstract class Animal {
int legs;
public Animal (int legs) {
this.legs = legs;
}
public abstract void walk();
public abstract void eat();
}
/**
* Spider类,继承自Animal类
*
*
*/
public class Spider extends Animal {
int legs;
public Spider(int legs) {
super(legs);
this.legs = legs;
System.out.println("Spider has "+ legs +" legs");
}
@Override
public void walk() {
System.out.println("Spider is walking!");
}
@Override
public void eat() {
System.out.println("Spider is eating!");
}
}
/**
* AnimalTest测试代码
*
*
*/
public class AnimalTest {
public static void main(String []args) {
AnimalTest animalTest = new AnimalTest();
animalTest.spiderTest();
}
public void spiderTest() {
Spider splider = new Spider(8);
splider.walk();
splider.eat();
}
}
运行打印输出如下