qq空间做网站,东莞网站建设及外包,域名和网站绑定,网站建设与维护书籍Java中可以可以定义不含方法体的方法#xff0c;方法的方法体由其所在类的子类根据实际需求去实现#xff0c;这样的方法称为抽象方法#xff08;Abstract Method#xff09;#xff0c;包含抽象方法的类必须是抽象类#xff08;Abstract Class#xff09;。
抽象方法和… Java中可以可以定义不含方法体的方法方法的方法体由其所在类的子类根据实际需求去实现这样的方法称为抽象方法Abstract Method包含抽象方法的类必须是抽象类Abstract Class。
抽象方法和抽象类 1.1抽象方法
Java中提供了 abstract 关键字 表示抽象的意思用abstract修饰的方法修饰的方法称为抽象方法。抽象方法不是一个完整的方法只有方法的声明没有方法体。
抽象方法没有方法体具体的实现由子类完成且抽象方法必须定义在抽象类或者接口里面
1.2 抽象类
用abstract修饰的类 称为抽象类抽象类可以不包含任何抽象方法。定义抽象类和抽象方法的语法格式如下
[修饰符] abstract class 类名{[修饰符] abstract 方法返回值类型 方法名 ([参数列表])//其他成员
}
比如
abstract class Graph{publicc abstract void getArea();
} 使用抽象类时需要注意抽象类不能被实例化即不能用new关键字创建对象。这是因为抽象类中可包含抽象方法抽象方法只有 声明没有方法体不能被调用。但是我们可以通过子类继承抽象类去实现抽象方法。 子类定义时实现了抽象方法因此在实例化子类对象后子类可以调用子类中实现的抽象方法。 需要注意的是具体子类必须实现抽象父类中的所有抽象方法否则子类必须声明为抽象类不然子类会报错。 抽象类时不能实例化的即使实例化了去调用抽象方法也没有方法体。虽然一些抽象方法中会存在普通方法子类可以进行调用但是包含抽象方法的类必须为抽象类。抽象类中的构造方法不能全部定义为私有的否则就不能创建子类的对象了子类构造方法必须调用父类构造方法创建对象。抽象类并不是一个完整的类它必须有子类继承才有意义功能才得以实现。 抽象类中可以不存在抽象方法以防止外界创造 对象因此有一些工具类中虽然没有抽象方法却使用了abstract修饰。 2.接口 生活中许多硬件接口通常用于与其他硬件设备相连接。编程中有软件接口指的是 一种程序代码可被看作一种特殊的类也属于引用类型它表示一种规范是全局常量和公共抽象方法的集合每个接口都可以被编译成独立的字节码文件。 接口只定义了类应当遵守的规范去并不关心这些类的内部数据和其功能的实现细节。站在程序的角度上说接口只规定了类中必须提供的方法从而分离了规范和实现增强了系统的可拓展性和维护性。接口和实现类体现多态。
3.1 接口实现和声明 接口是抽象类的延伸可以将它看成纯粹的抽象类。接口中的所有方法都是抽象方法。Java提供了interface关键字用于声明接口语法格式如下
interface 接口 [extends 父接口列表]{[public] [static] [final] 常量;[public] [abstract] 方法;
} 接口名用于指定接口名称它必须是合法的Java标识符一般要求首字母大写接口之间也存在继承关系使用extends关键字指定要定义的接口继承于哪个父接口接口会默认为常量添加“public static final”修饰符为方法添加“public abstract”修饰符。因此修饰符可以省略不写。 接口不能实例化即不能使用new创建接口的实现类。如果需要调用接口中的非静态方法只需要通过接口实现类的对象来调用。Java提供implements 关键字用于实现接口。一个类可以在继承另一个类的同时实现多个接口语法格式如下
class 类名 [extends 父类名] implements 接口列表{属性和方法;
} 接口列表中多个接口之间使用英文逗号分隔。
3.2抽象类和接口的关系 抽象类与接口是Java语言对于抽象类定义进行支持的两种机制二者非常相似但抽象类是对根源的抽象而接口是对动作和规范的抽象二者的区别可区别可以归纳为5点。 • 子类只能继承一个抽象类但是可以实现多个接口。 • 接口中的方法都是抽象方法而抽象类中可以存在非抽象方法。 • 抽象类中的变量可以是任意数据类型接口中的成员变量只能是静态常量。 • 抽象类中可以定义静态方法和静态代码块等接口中可以定义静态方法但是没有静态代码块。 • 接口中没有构造方法抽象类有构造方法。 总体来说抽象类和接口都用于为对象定义共同的行为二者在很大程度上是可以互相替换的但是由于抽象类只允许单继承所以当二者都可以使用时优先考虑接口只有当需要定义子类行为并为子类提供共性功能时才考虑用抽象类。
4.内部类 在Java中类中除了可以定义成员变量与成员方法还可以定义类这样的类称为内部类内部类所在的类称为外部类。根据内部类的位置、修饰符和定义的方式可以分为成员内部类、静态内部类、方法内部类以及匿名内部类4种。 内部类有3个共性。 • 内部类与外部类经Java编译器编译后生成的两个类是独立的。 • 内部类是外部类的一个成员因此能访问外部类的任何成员包括私有成员但是外部类不能直接访问内部类成员。 • 内部类可为静态可用protect和private修饰而外部类只能用public修饰且具有默认的访问权限。
4.1成员内部类 成员内部类是指类作为外部类的一个成员能直接访问外部类的所有成员但是外部类中访问内部类则需要在外部类中创建内部类的对象使用内部类的对象来访问内部类的成员。同时若要在外部类外访问内部类则需要通过外部类对象去创建内部类对象在外部类外创建一个内部类对象的格式如下
外部类名.内部类名 引用变量名 new 外部类名.new 内部类名;另外需要注意的是成员内部类不能定义静态变量、静态方法和静态内部类。这是因为当外部类被加载时内部类是非静态的那么Java编译器不会初始化内部类中的静态成员这就与Java编译原则相悖。
4.2 内部静态类 如果不需要外部类对象与内部类对象之间有联系那么可以将内部类声明为static 用static关键字修饰的内部类称静态内部类。静态内部类可以有实例成员和静态成员它可以直接访问外部类的静态成员但如果想访问外部类的实例成员就必须通过外部类的对象去访问。另外如果外部类访问静态内部类成员则不需要创建外部类对象只需要创建内部类对象即可。创建内部类对象语法如下
外部类名.内部类名 引用变量名 new 外部类名.内部类名(); 若要访问内部类的静态成员则无需创建外部类和静态内部类对象可通过“外部类名 . 内部类名 . 静态成员” 的形式访问。若要访问内部类的实例成员则需要创建静态内部类对象通过“new 外部类名 . 内部类名”形式可直接创建内部类对象。
4.3 方法内部类 方法内部类又称为局部内部类是指在成员方法中定义的类他与局部变量类似作用域为它所在代码块因此它只能在定义它的方法内的实例化不可以在此方法外实例化。
4.4匿名内部类 匿名内部类就是没有名称的内部类它的特点是只能使用一次不能重复使用及创建匿名内部类的实例对象后这个匿名内部类的定义会立即消失。匿名内部类的所有实现代码都需要在大括号之间编写最常用的创建匿名内部类的方式是创建某个接口或者抽象类的对象。 创建匿名内部类的格式如下
new ClassName{//匿名内部类的实体
} 需要注意的是匿名内部类是不能加访问权限修饰符的而且被new的匿名内部类必须 是先定义的。