【基础训练 1】抽象类的定义与使用。

【目标】了解继承抽象类的子类要覆盖父类定义的抽象方法。

(1) 定义和继承抽象类

java script内嵌式例子 java内嵌类_抽象类

对程序进行编译,分析错误原因。

抽象方法没有方法体,并且含有抽象方法的类只能是抽象类,抽象类不能被实例化为对象,在具体应用中需要被继承。

因此,这里出错的原因是类型 Test 必须实现继承的抽象方法 Shape.area()。

(2)在 Test 类中编写 area( )方法,覆盖掉由其父类继承的抽象方法。

public double area( ){ 
return 100; 
}

重新编译运行程序,观察输出结果。

java script内嵌式例子 java内嵌类_java script内嵌式例子_02

【思考】 抽象类中可以定义具体方法吗?抽象类定义的具体方法在子类中一定要重新定义吗?

抽象类中可以定义具体方法和属性。具体类要将因“继承关系”所带来的的抽象方法均覆盖掉。

(3) 给抽象类编写一个无参构造方法

public Shape() { 
System.out.println("calling Shape"); 
}

重新编译运行程序,观察输出结果变化:

java script内嵌式例子 java内嵌类_构造方法_03

总结子类构造方法和父类构造方法的关系,思考抽象类的构造方法的作用。

使用了关键词abstract声明的类叫作“抽象类”。如果一个类里包含了一个或多个抽象方法,类就必须指定成abstract(抽象)。“抽象方法”,属于一种不完整的方法,只含有一个声明,没有方法主体。java抽象类的构造知方法和普通类的构造方法一样都是用来初始化类,只是抽象类的构造方法不能直接调用,因为抽象类不道能实现实例,但是一旦一个普通类继承了抽象类,便也可以在构造函数中调用其抽象类的构造函数。

【基础训练 2】接口的定义与使用。

【目标】理解一个类实现接口要在类中重写接口中定义的行为方法,以及通过接口类型的引用变量可引用实现接口的对象。

(1)定义和实现接口

java script内嵌式例子 java内嵌类_构造方法_04

接口中所有的属性的修饰默认都是public static final;

接口中抽象方法的修饰默认都是public static;

实现接口必须覆盖掉接口中定义的所有抽象方法。

(2)在 Test1 类中增加如下方法:

public void action( ){ 
System.out.println("stand up"); 
}
public static void main(String a[ ]) { 
Test1 x = new Test1( ); 
x.action( ); 
}

编译并执行程序,分析为何要在 action 方法头增加public 修饰:

java script内嵌式例子 java内嵌类_构造方法_05

在 action 方法头增加public 修饰是因为子类覆盖方法的访问修饰不能比父类有更多的限制。

(3)另增加一个类 Test2 实现 Listener 接口

class Test2 implements Listener { 
public void action( ){ 
System.out.println("sit down"); 
} 
}

并修改 Test1 类的 main 方法。

public static void main(String a[ ]) { 
Listener x[ ] = { new Test1(),new Test2 () }; 
x[0].action( ); 
x[1].action( ); 
}

调试程序,观察通过接口引用变量访问对象方法的动态多态行为。

java script内嵌式例子 java内嵌类_构造方法_06

(4)在方法参数中使用接口类型。

给 Test1 类增加一个方法 add,设计如下:

public void add(Listener a) { 
a.action( ); 
}

并 main 方法改动如下:

public static void main(String a[ ]) { 
Test1 x = new Test1( ); 
x.add(x); 
x.add(new Test2( )); 
}

观察输出结果,分析其内在关系。

java script内嵌式例子 java内嵌类_抽象方法_07

接口用于行为约束。

一个类只能继承一个父类,但可以实现多个接口。 

【基础训练 3】内嵌类的定义与使用。

【目标】理解内嵌类的特点。

(1) 两个并列类之间的对象成员数据访问

要在类 B 的 m()方法中访问类 A 的实例变量,可编写以下一段代码:

java script内嵌式例子 java内嵌类_抽象方法_08

(2) 将类 B 作为 A 的成员类

java script内嵌式例子 java内嵌类_java script内嵌式例子_09

调试程序,比较两种访问方式各自特点。

内嵌类可以直接访问外部类的成员。

【思考】将类 A 中的成员变量 x 和类 B 以及类 B 中的方法 m 均加上 static 修饰,给出在类 A 的 main 方法中调用其内嵌类 B 的 m()方法的最简洁写法。

java script内嵌式例子 java内嵌类_抽象类_10