- 中文名
- 类库
- 外文名
- Class Library
- 所属学科
- 计算机科学
- 包 括
- 接口、抽象类和具体类
- 专 用
- 开发任务
在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。父类包含了子类集合的常见的方法,但是由于父类本身是抽象的,所以不能使用这些方法。
在Java中抽象类表示的是一种继承关系,一个类只能继承一个抽象类,而一个类却可以实现多个接口。
抽象类除了不能实例化对象之外,类的其它功能依然存在,成员变量、成员方法和构造方法的访问方式和普通类一样。
由于抽象类不能实例化对象,所以抽象类必须被继承,才能被使用;但是抽象类可以派生子类。抽象类的子类必须给出抽象类中的抽象方企估法的具体实现,除非该子类也是抽象类。也是因为这个原因,通常在设只燥艰计阶段决定要不要设计抽象类。
抽象类可能含有抽象方法,也可能没有,但抽象类中可以含有非抽象的方法。如果一个类含有抽象方法,那么这个类必须被声明为抽象类abstract
(2)抽象类的格式:
abstract class 抽驼嚷腊愚象类名{ }
(3)抽象方法:
如果某个方法被声明,但是没有被实现(即没有花括号、方法体,声明后面直接就是分号),那么该方法被称为“抽象方法”。
抽象类的子类必须给出抽象类中的抽象方法的具体实现,除非该子类也是抽象类。
例如:abstract void abstractMethod( );
抽象类中不一定包含抽象方法,但是有抽象方法的类必定是抽象类。抽象类中的抽象方法只是声明,不包含方法体,就是不给出方法的具体实现,也就是方法的具体功能。
构造方法,类方法(用 s和想纹tatic 修饰的方法)不能声明为抽象方法。
修饰符static和abstract不能一起使用。如果某个方法声明为抽象的,就不能声明为静态的。如果某个方法声明为静态的,就不能声明为抽象的。
在一个Java类体中定义另一个类叫作嵌套类。拥有嵌套类的类叫外围类或者外部类。
class OuterC付禁胶lass{
class NestedClass{ }
樱酷催}
(1)静态嵌套类:
如果要为静态嵌套类创建对象,则使用以下语法:
OuterClass.StaticNestedClass nestedObject =newOuterClass.StaticNestedClass( );
使用静态嵌套类连旬杠对象来访问外部类的实例变量和实例方法雅探。例如:OuterClass.StaticNestedClass
(2)非静态嵌套类(内部类)
内部类不能定义任何静态成员,内部类的实例化对象存在于外部类的实例化对象中。要实例化一个内部类,必须先实例化其外部类。
OuterClass.InnerClass innerObject =newOuterClass.InnerClass( );
它又可以分为以下三种:成员内部类(Member inner class)、匿名内部类(Anonymous inner class)、局部内部类(Local inner class)
public class AnonymousInner {
public static void main(String[] args){
// 使用匿名内部类实例化抽象类Person
Person p = new Person() {
void create() {System.out.println(str);}
};
p.create();
Animal a = new Animal() {
public void run(){System.out.println("匿名内部类通过接口创建对象");}
};
a.run();
}
}
abstract class Person {
String str = "匿名内部类通过抽象类创建对象";
abstract void create();
}
interface Animal{
void run();
}