抽象类是一种特殊的数据类型,一般来说,抽象类都会包含抽象方法,也可以不包含。
抽象类不能实例化,但可以定义引用来得到子类的对象。
抽象类一般都有子类,而子类一定需要去实现抽象类的方法。
例如如下代码:
public class Text {
public static void main(String[] args) {
//抽象类定义引用得到子类的对象
Moo mo = new Moo01();
mo.updata("zbt");
}
}
/*
抽象类演示
在class前加 abstract 关键字
*/
abstract class Moo{
String name;
//抽象类的抽象方法没有方法体
public abstract void delete(int id);
public abstract void updata(String name);
}
/*
定义子类实现抽象类用关键字extends
并且要实现抽象类中的所有方法
*/
class Moo01 extends Moo{
public void delete(int id) {
System.out.println("我实现了抽象类方法");
};
public void updata(String name) {
this.name = name;
System.out.println("我实现了抽象类方法01"+this.name);
};
}
使用抽象类应该注意一下几点:
(1) 抽象类不能实例化
(2) abstract 修饰抽象方法,抽象方法不能有方法体
(3) 包含抽象方法的类,一定是抽象类,要时用 abstract 修饰
(4) 抽象类不能直接实例化,使用抽象概念可以声明引用变量
(5) 抽象概念的引用变量可以引用具体的子类实例
(6) 抽象类只能被继承,子类一定需要实现抽象类的抽象方法
(7) 定义抽象类时绝不能使用 final 关键字,因为抽象类必须要有子类(继承Extends),而 final 定义的类不能有子类(final关键字定义的类不能被继承,同时final定义的属性初始化后不能修改)
(8) 抽象类中可以提供有构造方法,并且子类也一定会按照子类对象的实例化原则进行父类构造调用
(9) 抽象类中允许没有抽象方法,但依然无法直接实例化
(10) 抽象类中可以提供有static方法,并且该方法不受抽象类对象的局限(static 方法永远不受实例化对象或结构的限制,永远可以直接通过类名称进行调用)
抽象类的主要作用在于对子类中覆写方法进行约束,抽象类和抽象方法必须使用 abstract 关键字定义,抽象方法没有方法体
抽象类只是比普通类增加了抽象方法和对子类的强制性覆写方法而已,其余的使用过程和传统的类继承完全相同
抽象类的使用目的主要是进行过渡操作,解决类继承问题是所带来的代码重复处理。
接口可以看成一种特殊的抽象类,接口具有如下特征:
(1) 接口中的所有方法都是抽象方法
(2) 接口中的所有属性都是静态常量( static final )
(3) 接口没有构造方法
(4) 一个类可以同时实现多个接口,也可以不实现任何接口
以下代码演示了如何定义接口以及实现接口:
/*
定义一个接口用关键字 interface(接口)
接口中定义抽象方法不需要使用 abstract(继承)
*/
public interface Interface {
public void delete(int id);
public void update(int id);
}
/*
实现一个接口用关键字 implements
并且一定要实现接口中的所有抽象方法
*/
class InterfaceText implements Interface{
public void delete(int id) {};
public void update(int id) {};
}
我们知道,Java 语言是一种单一继承语言,即一个子类有且只有一个唯一的父类。这就使得 Java 的继承结构是一个树状结构。这种单一继承关系从某种程度上来说使得 Java 的继承逻辑变得简单、清晰,降低了编程难度;但同时也有一些局限性。当希望一个类从多个父类继承代码时,单一继承关系没有办法实现,而接口可以补缺这个不足,即一个子类能实现多个接口。
以下代码演示了如何实现多个接口:
//定义第一个接口
public interface Interface {
public void delete(int id);
public void update(int id);
}
//定义第二个接口
interface Interface01{
public void insert(int id,String name);
}
//一个子类可以实现多个接口,中间用逗号隔开
class InterfaceText implements Interface,Interface01{
public void delete(int id) {};
public void update(int id) {};
public void insert(int id,String name) {};
}