Java面向对象编程(二)
eas class prot font nal clas 静态 返回
上一篇博文里总结了面向对象三大特性在 Java 中的体现。如今谈一谈 Java 中的抽象类,接口,内部类等特性。
一. 抽象类
- public abstract class Shape {
- public int shapeID = 0;
- public abstract double getArea();
- }
- Java 中同意类、接口或成员方法具有抽象属性,而不同意成员域或构造方法具有抽象属性。
- 类修饰词中含有 abstract 的类具有抽象属性,称为抽象类;接口总是具有抽象属性。
- 假设成员方法的修饰词中含有 abstract。则该成员方法具有抽象属性,称为抽象方法。抽象方法仅仅能在抽象类或接口中定义。而抽象类中一般有至少一个抽象方法,所以整体上来讲。含有抽象方法的类叫做抽象类。
- 抽象方法不含方法体。格式例如以下:[方法修饰词列表] 返回类型 方法名 (參数列表);
- 抽象类能够具有构造方法。但不能直接生成实例,必须通过非抽象子类生成实例。
- 假设抽象类的子类不是抽象类,则要求在子类的定义中必须覆盖父类 (抽象类) 的全部抽象方法。
二. 接口
Java 不同意一个子类拥有多个直接父类,但同意一个类实现多个接口。接口定义的格式为:
[接口修饰词列表] interface 接口名 [extends 接口名列表] {接口体}- public interface Shape {
- public static final double PI = 3.14159;
- public abstract double getArea();
- }
- 外部接口和外部类一样,一般都不具有 protected 和 private 属性
- 接口本身具有抽象属性。所以 abstract 修饰词是不必要的。
- 接口体内部不含构造方法,不能直接通过接口生成实例对象
- 接口的全部成员域都具有 public、static 和 final 属性;接口的全部成员方法都具有 public 和 abstract 属性
- 若实现接口的类不是抽象类。则须要在该类的类体中定义覆盖该接口中的全部成员方法。
三. 内部类
实名内部类
- 实名内部类的封装性修饰词添加了 protected 和 private。能够依据情况选择。
- 对于不具有静态属性的实名内部类,假设它的成员域具有静态属性,则必须同一时候具有 final 属性;不具有静态属性的实名内部类不能含有具有静态属性的方法。
- 实名内部类实例对象的创建方法 * 静态实名内部类的实例对象:
new 外部类名. 实名内部类名 (參数列表)* 不具有静态属性的实名内部类的实例对象:外部类表达式. new 实名内部类名 (參数列表)
匿名内部类
匿名内部类不具有类名,不能具有抽象和静态属性,而且不能派生出子类。匿名内部类的定义格式是:
new 父类型名 (參数列表) {类体}举个样例比較 easy 理解:
- abstract class ClassA {
- int data;
- public ClassA(int i) {
- data = i;
- }
- public abstract void method();
- }
- public class ClassB {
- public static void main(String[] args) {
- ClassA a = new ClassA(3) {
- public void method() {
- System.out.println(data);
- }
- };
-
- a.method();
- }
- }
四. final 修饰词
- 具有 final 属性的的类不能派生子类
- 假设成员域具有 final 属性。则不能被子类的成员域所覆盖,且在赋值后不能被改变。假设成员域同一时候具有 final 和 static 属性,则其仅仅能在定义时赋值;假设成员域仅仅具有 final 属性。不具有 static 属性。则仅仅能在定义时或构造方法中赋值。
- 假设一个类的成员方法具有 final 属性。则其不能被当前类的子类的成员方法覆盖。
五. static 修饰词
除内部类外,类一般不具有 static 属性。static 的内部类的原因和特性还须要进一步学习。
六. Misc
abstract, static, final 是三个经常使用修饰词。这三个修饰词中仅仅有 static 和 final 两个修饰词能够组合在一起。
Java 面向对象编程 (二)
来源: http://www.bubuko.com/infodetail-2045230.html