抽象类和接口
抽象类:
在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的 类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象, 这样的类就是抽象类。
抽象类除了不能实例化对象之外,类的其它功能依然存在,成员变量、成员方法、初 始化块和构造方法和普通类一样。 由于抽象类不能实例化对象,所以抽象类必须被继承,才能被使用。
示例代码:
public abstract class Animal {
//成员变量
protected int weight =0;
{
System.out.println("初始化块");
}
//构造器
public Animal(){
System.out.println("Animal 的构造器");
}
public Animal(int weight) {
this.weight=weight;
System.out.println("Animal 的构造器");
}
// 定义一个普通方法 休息
public void sleep() {
System.out.println("休息");
}
//抽象方法 没有方法体
public abstract void running();
public abstract String sayWeiget();
}
继承抽象类
/**
* 继承抽象类要重写里面的抽象方法
* @author 我是灰太狼
*/
class AnimalTwo extends Animal{
@Override
public void running() {
// TODO Auto-generated method stub
System.out.println("running");
}
@Override
public String sayWeiget() {
// TODO Auto-generated method stub
return null;
}
}
接口:
接口,在JAVA编程语言中是一个抽象类型,是抽象方法的集合, 接口通常以interface来声明。一个类通过继承接口的方式,从而来继承接口的抽象方 法。
接口并不是类,编写接口的方式和类很相似,但是它们属于不同的概念。类描述对象 的属性和方法。
接口则包含类要实现的方法。 除非实现接口的类是抽象类,否则该类要定义接口中的所有方法。
接口无法被实例化,但是可以被实现。一个实现接口的类,必须实现接口内所描述的 所有方法,否则就必须声明为抽象类。
示例代码:
/**
*
*[修饰符] interface 接口名 extends 父接口1,父接口2,......
*{
* //零到多个静态常量定义...
* //零到多个抽象方法定义....
*}
*接口可以继承多个父接口,但接口只能继承接口,不能继承类。
* @author 我是灰太狼
*
*/
public interface InterfaceOne {
//编译时自动为接口里定义的成员变量增加public static final修饰符
int INT_A=11;//声明时必须赋值
public final static int INT_B=11;
//public static final int INT_B=11;//没有报错,不知道是否可以
//编译时自动为接口里定义的方法添加public abstract修饰符
public abstract void print();
void test();
}
接口的实现
当类实现接口的时候,类要实现接口中所有的方法。否则,类必须声明为抽象的类。 类使用implements关键字实现接口。
/**
* 抽象类可以继承一个类和实现多个接口
* @author 我是灰太狼
*
*/
public abstract class Demo2 implements InterfaceOne,InterfaceTwo {
}
/**
* 类可以继承一个类和实现多个接口,不过要重写它的方法。
* @author 我是灰太狼
*
*/
class Demo implements InterfaceOne,InterfaceTwo {
@Override
public void print() {
// TODO Auto-generated method stub
}
@Override
public void test() {
// TODO Auto-generated method stub
}
@Override
public void println() {
// TODO Auto-generated method stub
}
}
抽象类和接口的对比
抽象类使用extends关键字来继承抽象类,如果子类不是抽象类的话,它需要提供抽象类中所有声明的 抽象方法的实现;接口使用关键字impements来实现接口,它需要提供接口中所有声 明的方法的实现。
抽象类除了不能实例化抽象类之外,它和普通Java类没有任何区别;接囗是完全不同的类型。
抽象类可以继承一个类和实现多个接口,接口只可以继承一个或多个其它 接口。