[习题与实践(四)x]

时间:2021-10-28 15:37:32  来源:网友投稿

习题与实践(四)

1、接口是否可继承接口 ? 抽象类是否可实现 (implements)接口 ? 抽

象类是否可继承具体类 (concrete class)?抽象类中是否可以有静态的

main 方法?

接口可以继承接口。

 抽象类可以实现 (implements)接口,抽象类是否可继承具体类。抽象类中可以有静态的 main 方法。

备注:只要明白了接口和抽象类的本质和作用,这些问题都很好回答,你想想,如果你是 java 语言的设计者,你是否会提供这样的支持,如果不提供的话, 有什么理由吗?如果你没有道理不提供, 那答案就是肯定的了。

只有记住抽象类与普通类的唯一区别就是不能创建实例对象和允许有 abstract 方法。

2、abstract class和 interface 有什么区别 ?

含有 abstract 修饰符的 class即为抽象类, abstract 类不能创建的实例对象。含有 abstract 方法的类必须定义为 abstract class,abstract class类中的方法不必是抽象的。

 abstract class类中定义抽象方法必须在具体 (Concrete)子类中实现,所以,不能有抽象构造方法或抽象静态方法。如果的子类没有实现抽象父类中的所有抽象方法, 那么子类也必须定义为 abstract 类型。

接口(interface)可以说成是抽象类的一种特例, 接口中的所有方

法都必须是抽象的。接口中的方法定义默认为 public abstract类型,

接口中的成员变量类型默认为 public static final。

下面比较一下两者的语法区别:

1.抽象类可以有构造方法,接口中不能有构造方法。

2.抽象类中可以有普通成员变量,接口中没有普通成员变量

3.抽象类中可以包含非抽象的普通方法, 接口中的所有方法必须都

是抽象的,不能有非抽象的普通方法。

4. 抽象类中的抽象方法的访问类型可以是 public,protected和(默

认类型 ,虽然

eclipse 下不报错,但应该也不行) ,但接口中的抽象方法只能是

public 类型的,并且默认即为 public abstract类型。

抽象类中可以包含静态方法,接口中不能包含静态方法

抽象类和接口中都可以包含静态成员变量,抽象类中的静态成

员变量的访问类型可以任意,但接口中定义的变量只能是public

static final 类型,并且默认即为 public static final类型。

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

下面接着再说说两者在应用上的区别:

接口更多的是在系统架构设计方法发挥作用,主要用于定义模块

之间的通信契约。

 而抽象类在代码实现方面发挥作用, 可以实现代码

的重用,例如,模板方法设计模式是抽象类的一个典型应用, 假设某

个项目的所有 Servlet 类都要用相同的方式进行权限判断、记录访问

日志和处理异常,那么就可以定义一个抽象的基类, 让所有的 Servlet

都继承这个抽象基类,在抽象基类的 service方法中完成权限判断、

记录访问日志和处理异常的代码, 在各个子类中只是完成各自的业务

逻辑代码,伪代码如下:

public abstract class BaseServlet extends HttpServlet

{

public final void service(HttpServletRequest request, HttpServletResponse response) throws IOExcetion,ServletException

{

记录访问日志

进行权限判断

if(具有权限 )

{

try

{

doService(request,response);

}

catch(Excetpion e)

{

记录异常信息

}

}

}

protected abstract void doService(HttpServletRequest request,

HttpServletResponse response) throws IOExcetion,ServletException;

//注意访问权限定义成 protected,显得既专业,又严谨,因为它

是专门给子类用的

}

public class MyServlet1 extends BaseServlet

{

protected void doService(HttpServletRequest request,

HttpServletResponse response) throws IOExcetion,ServletException

{

本 Servlet 只处理的具体业务逻辑代码

}

}

父类方法中间的某段代码不确定,留给子类干,就用模板方法设

计模式。

备注:这道题的思路是先从总体解释抽象类和接口的基本概念,

然后再比较两者的语法细节, 最后再说两者的应用区别。

 比较两者语

法细节区别的条理是: 先从一个类中的构造方法、 普通成员变量和方

法(包括抽象方法),静态变量和方法,继承性等 6 个方面逐一去比

较回答,接着从第三者继承的角度的回答, 特别是最后用了一个典型

的例子来展现自己深厚的技术功底。

3、代码查错

interface A{

int x = 0;

}

class B{

int x =1;

}

class C extends B implements A {

public void pX(){

System.out.println(x);

}

public static void main(String[] args) {

new C().pX();

}

}

答案:错误。在编译时会发生错误 (错误描述不同的 JVM 有不同的信息,意思就是未明确的 x 调用,两个 x 都匹配(就象在同时 import java.util 和 java.sql 两个包时直接声明 Date 一样)。对于父类的变量 , 可以用 super.x来明确,而接口的属性默认隐含为 public static final. 所以可以通过 A.x 来明确。

4、代码差错

interface Playable {

void play();

}

interface Bounceable {

void play();

}

interface Rollable extends Playable, Bounceable { Ball ball = new Ball("PingPang");

}

class Ball implements Rollable {

private String name;

public String getName() {

return name;

}

public Ball(String name) {

= name;

}

public void play() {

ball = new Ball("Football");

System.out.println(ball.getName());

}

}

这个错误不容易发现。

答案 : 错。

 "interface Rollable extends Playable, Bounceable"没有问

题。interface可继承多个 interfaces,所以这里没错。问题出在 interface

Rollable 里的 "Ball ball = new Ball("PingPang");" 。任何在 interface

里声明的 interface variable (接口变量,也可称成员变量 ),默认为

public static final。也就是说 "Ball ball = new Ball("PingPang");" 实际

上是 "public static final Ball ball = new Ball("PingPang");" 。在 Ball 类的 Play()方法中, "ball = new Ball("Football");" 改变了 ball 的reference,而这里的 ball 来自 Rollable interface,Rollable interface 里的 ball 是 public static final 的, final 的 object 是不能被改变reference的。因此编译器将在 "ball = new Ball("Football");" 这里显

示有错。

5. 定义接口 A,接口内有两个方法: method1(int x)和 method2(int

x,int y),它们的返回值类型均为 int。请编写一个 Applet,并使其实现接口 A:令方法 method1(int x)的功能是求 5 的 x 次方、方法

method2(int x,int y) 的功能是求两参数的最大值。在 paint()方法

中调用这两个方法,显示 method1(2)和 method2(2,8)的结果。

@程序

import java.awt.*;

import java.applet.*;

public class Applet1 extends Applet implements A

{

public void paint(Graphics g)

{

g.drawString(" 调 用 method1(2) 的 结 果 :

"+method1(2),20,20);

g.drawString(" 调 用 method2(2,8) 的 结 果 :

"+method2(2,8),20,40);

}

public int method1(int x)

{

int result=1;

for(int i=1;i<=x;i++)

result*=5;

return result;

}

public int method2(int x,int y)

{

return x>y?x:y;

}

}

interface A

{

public abstract int public abstract int



method1(int x);

method2(int x,int y);

}

6、定义名为



VolumeArea



的抽象类,在其中定义圆周率



的值为

3.14159,并定义两个抽象方法 volume(double r) 和 area(double r) ,

它们的返回值类型均为 float。再定义以类 VolumeArea 为父类的子类 VolumeAndArea ,在该 子 类 中实 现父 类 中的 抽 象 方法: 方 法 volume(double r) 的功能是求半径为 r 的球的体积(公式为:

4 r 3 3);方法 area(double r)的功能是求半径为 r 的圆的面积(公

式为: r2 )。请编写一个 Application ,在其主类中定义一个 VolumeAndArea 类的对象 x,通过对象 x 求半径为 r(r 的值由命令行给定 )的球的体积及该球最大切面的圆的面积,并输出计算结果。

@程序

public class Class1

{

static VolumeAndArea x=new VolumeAndArea( ); public static void main(String[ ] args) {

float r=Float.valueOf(args[0]).floatValue( );

System.out.println(" 半 径 为 "+r+" 的 球 的 体 积

="+x.volume(r));

System.out.println("半径为 "+r+" 的圆的面积 ="+ x.area(r));

}

}

abstract class VolumeArea

{

static final float myPI=3.14159f; public abstract float volume(double r); public abstract float area(double r);

}

class VolumeAndArea extends VolumeArea

{

public float volume(double r)

{

return (float)(4*myPI*r*r*r/3);

}

public float area(double r)

{

return (float)(myPI*r*r);

}

}

7、接口回调

1.答案:

【代码 1】:

public double computeWeight()

{ return 45.5;

}

【代码 2】:

public double computeWeight()

{ return 65.5;

}

【代码 3】:

public double computeWeight()

{

return 145;

}

【代码 4】:

for(int k=0;k<goods.length;k++)

{

totalWeights=totalWeights+goods[k].computeWeight();

}

2.模板代码

Road.java

interface ComputerWeight

{

public double computeWeight();

}

class Television implements ComputerWeight

{ 【代码 1】 //实现 computeWeight()方法。

}

class Computer implements ComputerWeight

{ 【代码 2】 //实现 computeWeight()方法。

}

class WashMachine implements ComputerWeight

{ 【代码 3】 //实现 computeWeight()方法。

}

class Car

{ ComputerWeight[] goods; double totalWeights=0; Car(ComputerWeight[] goods)

{

this.goods=goods;

}

public double getTotalWeights()

{

totalWeights=0;

【代码 4】 //计算 totalWeights

return totalWeights;

}

}

public class Road

{

public static void main(String args[])

{ ComputerWeight[] goodsOne=new ComputerWeight[50], goodsTwo=new ComputerWeight[22] ;

for(int i=0;i<goodsOne.length;i++)

{ if(i%3==0)

goodsOne[i]=new Television();

else if(i%3==1)

goodsOne[i]=new Computer();

else if(i%3==2)

goodsOne[i]=new WashMachine();

}

for(int i=0;i<goodsTwo.length;i++)

{ if(i%3==0)

goodsTwo[i]=new Television();

else if(i%3==1)

goodsTwo[i]=new Computer();

else if(i%3==2)

goodsTwo[i]=new WashMachine();

}

Car 大货车 =new Car(goodsOne);

System.out.println(" 大 货 车 装 载 的 货 物 重 量 :"+ 大 货

车.getTotalWeights());

Car 小货车 =new Car(goodsTwo);

System.out.println(" 小 货 车 装 载 的 货 物 重 量 :"+ 小 货

车.getTotalWeights());

}

}

下午 13 :00— 17: 00

B.实行不定时工作制的员工,在保证完成甲方工作任务情况下,经公司同意 ,可自行安排工作和休息时间。

3.1.2 打卡制度

公司实行上、下班指纹录入打卡制度。全体员工都必须自觉遵守工作时间,实行不定时工作制的员工不必打卡。

打卡次数:一日两次,即早上上班打卡一次,下午下班打卡一次。

打卡时间:打卡时间为上班到岗时间和下班离岗时间;

因公外出不能打卡:因公外出不能打卡应填写《外勤登记表》 ,注明外出日期、事由、外勤起止时间。因公外出需事先申请,如因特殊情况不能事先申请,应在事毕到岗当日完成申请、

审批手续,否则按旷工处理。因停电、卡钟(工卡)故障未打卡的员工,上班前、下班后要及时到部门考勤员处填写《未打卡补签申请表》 ,由直接主管签字证明当日的出勤状况,报部门经理、

人力资源部批准后,月底由部门考勤员据此上报考勤。上述情况考勤由各部门或分公司和项目文员协助人力资源部进行管理。

手工考勤制度

手工考勤制申请:由于工作性质,员工无法正常打卡(如外围人员、出差)

,可由各部门提出人员名单,经主管副总批准后,报人力资源部审批备案。

参与手工考勤的员工,需由其主管部门的部门考勤员

(文员 )或部门指定人员进行考勤管理,并于每月

26 日前向人力资源部递交考勤报表。

参与手工考勤的员工如有请假情况发生,应遵守相关请、休假制度,如实填报相关表单。

外派员工在外派工作期间的考勤

,需在外派公司打卡记录 ; 如遇中途出差 ,持出差证明 ,出差期间的考勤在出差地所在公司打卡记录;

3.2 加班管理

3.2.1 定义

加班是指员工在节假日或公司规定的休息日仍照常工作的情况。

.现场管理人员和劳务人员的加班应严格控制,各部门应按月工时标准,合理安排工作班次。部门经理要严格审批员工排班表,保证员工有效工时达到要求。凡是达到月工时标准的,应扣

减员工本人的存休或工资;对超出月工时标准的,应说明理由,报主管副总和人力资源部审批。

B.因员工月薪工资中的补贴已包括延时工作补贴,所以延时工作在 4小时(不含)以下的,不再另计加班工资。因工作需要,一般员工延时工作 4 小时至 8小时可申报加班半天,超过 8

小时可申报加班 1 天。对主管 (含 )以上管理人员,一般情况下延时工作不计加班,因特殊情况经总经理以上领导批准的延时工作,可按以上标准计加班。

员工加班应提前申请,事先填写《加班申请表》 ,因无法确定加班工时的,应在本次加班完成后 3 个工作日内补填《加班申请表》 。《加班申请表》经部门经理同意,主管副总经理审核

报总经理批准后有效。 《加班申请表》必须事前当月内上报有效,如遇特殊情况,也必须在一周内上报至总经理批准。如未履行上述程序,视为乙方自愿加班。

员工加班,也应按规定打卡,没有打卡记录的加班,公司不予承认;有打卡记录但无公司总经理批准的加班,公司不予承认加班。

原则上,参加公司组织的各种培训、集体活动不计加班。

加班工资的补偿:员工在排班休息日的加班,可以以倒休形式安排补休。原则上,员工加班以倒休形式补休的,公司将根据工作需要统一安排在春节前后补休。加班可按

1

:1 的比例冲

抵病、事假。

3.2.3 加班的申请、审批、确认流程

《加班申请表》在各部门文员处领取,加班统计周期为上月

26 日至本月

25 日。

员工加班也要按规定打卡,没有打卡记录的加班,公司不予承认。各部门的考勤员

(文员 )负责《加班申请表》的保管及加班申报。员工加班应提前申请,事先填写《加班申请表》加班

前到部门考勤员 (文员 )处领取《加班申请表》, 《加班申请表》经项目管理中心或部门经理同意,主管副总审核,总经理签字批准后有效。填写并履行完审批手续后交由部门考勤员

(文员 )保管。

部门考勤员(文员)负责检查、复核确认考勤记录的真实有效性并在每月

27 日汇总交人力资源部,逾期未交的加班记录公司不予承认。

下午 13 :00— 17: 00

度。全体员工都必须自觉遵守工作时间,实行不定时工作制的员工不必打卡。

打卡次数:一日两次,即早上上班打卡一次,下午下班打卡一次。

打卡时间:打卡时间为上班到岗时间和下班离岗时间;

因公外出不能打卡:因公外出不能打卡应填写《外勤登记表》 ,注明外出日期、事由、外勤起止时间。因公外出需事先申请,如因特殊情况不能事先申请,应在事毕到岗当日完成申请、

审批手续,否则按旷工处理。因停电、卡钟(工卡)故障未打卡的员工,上班前、下班后要及时到部门考勤员处填写《未打卡补签申请表》 ,由直接主管签字证明当日的出勤状况,报部门经理、

人力资源部批准后,月底由部门考勤员据此上报考勤。上述情况考勤由各部门或分公司和项目文员协助人力资源部进行管理。

手工考勤制度

手工考勤制申请:由于工作性质,员工无法正常打卡(如外围人员、出差)

,可由各部门提出人员名单,经主管副总批准后,报人力资源部审批备案。

参与手工考勤的员工,需由其主管部门的部门考勤员

(文员 )或部门指定人员进行考勤管理,并于每月

26 日前向人力资源部递交考勤报表。

参与手工考勤的员工如有请假情况发生,应遵守相关请、休假制度,如实填报相关表单。

外派员工在外派工作期间的考勤

,需在外派公司打卡记录 ; 如遇中途出差 ,持出差证明 ,出差期间的考勤在出差地所在公司打卡记录;

3.2 加班管理

3.2.1 定义

加班是指员工在节假日或公司规定的休息日仍照常工作的情况。

.现场管理人员和劳务人员的加班应严格控制,各部门应按月工时标准,合理安排工作班次。部门经理要严格审批员工排班表,保证员工有效工时达到要求。凡是达到月工时标准的,应扣

减员工本人的存休或工资;对超出月工时标准的,应说明理由,报主管副总和人力资源部审批。

B.因员工月薪工资中的补贴已包括延时工作补贴,所以延时工作在 4小时(不含)以下的,不再另计加班工资。因工作需要,一般员工延时工作 4 小时至 8小时可申报加班半天,超过 8

小时可申报加班 1 天。对主管 (含 )以上管理人员,一般情况下延时工作不计加班,因特殊情况经总经理以上领导批准的延时工作,可按以上标准计加班。

员工加班应提前申请,事先填写《加班申请表》 ,因无法确定加班工时的,应在本次加班完成后 3 个工作日内补填《加班申请表》 。《加班申请表》经部门经理同意,主管副总经理审核

报总经理批准后有效。 《加班申请表》必须事前当月内上报有效,如遇特殊情况,也必须在一周内上报至总经理批准。如未履行上述程序,视为乙方自愿加班。

员工加班,也应按规定打卡,没有打卡记录的加班,公司不予承认;有打卡记录但无公司总经理批准的加班,公司不予承认加班。

原则上,参加公司组织的各种培训、集体活动不计加班。

加班工资的补偿:员工在排班休息日的加班,可以以倒休形式安排补休。原则上,员工加班以倒休形式补休的,公司将根据工作需要统一安排在春节前后补休。加班可按

1

:1 的比例冲

抵病、事假。

3.2.3 加班的申请、审批、确认流程

《加班申请表》在各部门文员处领取,加班统计周期为上月

26 日至本月

25 日。

员工加班也要按规定打卡,没有打卡记录的加班,公司不予承认。各部门的考勤员

(文员 )负责《加班申请表》的保管及加班申报。员工加班应提前申请,事先填写《加班申请表》加班

前到部门考勤员 (文员 )处领取《加班申请表》, 《加班申请表》经项目管理中心或部门经理同意,主管副总审核,总经理签字批准后有效。填写并履行完审批手续后交由部门考勤员

(文员 )保管。

部门考勤员(文员)负责检查、复核确认考勤记录的真实有效性并在每月

27 日汇总交人力资源部,逾期未交的加班记录公司不予承认。

推荐访问:实践 习题 实践 习题与实践(四)x


[[习题与实践(四)x]]相关文章