(Java)抽象类,接口,内嵌类实验

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

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

(1) 定义和继承抽象类

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

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

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

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

public double area( ){

return 100;

}

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

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

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

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

public Shape() {

System.out.println("calling Shape");

}

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

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

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

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

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

(1)定义和实现接口

接口中所有的属性的修饰默认都是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 修饰:

在 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( );

}

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

(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( ));

}

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

接口用于行为约束。

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

 

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

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

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

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

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

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

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

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

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值