java借口不同程序_java接口和抽象类的不同

一 从语义的角度选择不同之处;

接口与抽象类在语义上区别主要在定义和使用格式上,下面分别介绍抽象类和接口的定义与使用:

1, 抽象类的定义和使用格式:

在java语言中定义抽象类时,要在关键字class前面加上abstract,格式如下:

abstract class class_name{

类体

}

在java中定义完抽象类之后,我们使用抽象类,同时子类只能继承一个抽象类的父类(单继承),继承之后子类必须全部覆盖父 类中的抽象方法;

class sub_class_name extend parent_class_name{

父类中的抽象方法;

}

在使用抽象类是请注意一下几点:

在使用抽象类时需要注意几点:

1、抽象类不能被实例化,实例化的工作应该交由它的子类来完成,它只需要有一个引用即可。

2、抽象方法必须由子类来进行重写。

3、只要包含一个抽象方法的抽象类,该方法必须要定义成抽象类,不管是否还包含有其他方法。

4、抽象类中可以包含具体的方法,当然也可以不包含抽象方法。

5、子类中的抽象方法不能与父类的抽象方法同名。

6、abstract不能与final并列修饰同一个类。

7、abstract 不能与private、static、final或native并列修饰同一个方法。

抽象类的举例如下:

需求:

假如我们在开发一个系统时需要对员工进行建模,员工包含3个属性;

姓名,工号以及工资,经理也是员工,除了含有员工的属性外,另外还有一个;

奖金属性,请使用继承的思想设计除员工类和经理类,要求类中提供必要的方法进行属性访问;

实现代码:

abstract class Employmen{

private String name;

private int numid;

private double slary;

//初始化

public Employmen(String name,int numid,double slary) {

// TODO Auto-generated constructor stub

this.name = name;

this.numid = numid;

this.slary = slary;

}

abstract void work();

}

/**

* 注意:

* 在声明完属性之后,子类继承了父类中的方法和属性;

* 同时要对子类进行初始化;用构造方法

* */

//普通员工要初始化

class WorkMan extends Employmen{

//初始化属性

public WorkMan(String name, int numid, double slary) {

super(name, numid, slary);

// TODO Auto-generated constructor stub

}

@Override

void work() {

// TODO Auto-generated method stub

System.out.println("--- --- 员工干活");

}

}//结束

//经理类

class ProjectManager extends Employmen{

//初始化属性

public ProjectManager(String name, int numid, double slary,double reward) {

super(name, numid, slary);

this.reward = reward;

// TODO Auto-generated constructor stub

}

private double reward;

@Override

void work() {

// TODO Auto-generated method stub

System.out.println("经理干活 ----  ----  ");

}

}//结束

2, 接口的定义和使用方法:

在java中使用关键字interface来定义接口,一个接口由变量的定义和方法的定义两部分组成。定义格式如下:

interface interface_name{

[public] [static] [final]变量;

[public] [abstract]方法;

}

在java语言中接口通过实现的方式来使用接口,一个类可以实现多个接口,使用格式如下:

class class_name implement interface_name{

实现接口的方法;

}

在使用接口时请注意一下几点:

1、个Interface的方所有法访问权限自动被声明为public。确切的说只能为public,当然你可以显示的声明为protected、private,但是编译会出错!

2、接口中可以定义“成员变量”,或者说是不可变的常量,因为接口中的“成员变量”会自动变为为public static final。可以通过类命名直接访问:ImplementClass.name。

3、接口中不存在实现的方法。

4、实现接口的非抽象类必须要实现该接口的所有方法。抽象类可以不用实现。

5、不能使用new操作符实例化一个接口,但可以声明一个接口变量,该变量必须引用(refer to)一个实现该接口的类的对象。可以使用 instanceof 检查一个对象是否实现了某个特定的接口。例如:if(anObject instanceof Comparable){}。

6、在实现多接口的时候一定要避免方法名的重复。

接口的举例如下:

例如:

//抽象类

abstract class Student{

abstract void study();

void sleep(){

System.out.println("睡觉");

}

}//end

//接口

interface Beat{

public abstract void beatman();

public abstract void goodMouth();

}//end

//P类

class P extends Student implements Beat {

@Override

void study() {

// TODO Auto-generated method stub

System.out.println("好好学习   ");

}

@Override

public void goodMouth() {

// TODO Auto-generated method stub

System.out.println("给之间留点口德,");

}

@Override

public void beatman() {

// TODO Auto-generated method stub

//什么也没有做

}

}//end

二 抽象类和接口的区别:

在了解接口和抽象类的定义之后,我们来看如何更好的选择接口和抽象类之间的区别:

(1)抽象类可以提供成员的实现细节,而接口不能。设计抽象时,如果要求提供 的成员的实现细节,可选择抽象类。

(2)如果设计抽象时选择抽象类,在以后的版本中可以随意为抽象类添加新成员。而接口在这方面就没有那么灵活,只有修改代码才能添加成员。

(3)一个类可以实现多个接口,但只能继承一个抽象类,如果要实现类似于多重继承的效果,可选择接口。

三 接口和抽象类的总结

1、 抽象类在java语言中所表示的是一种继承关系,一个子类只能存在一个父类,但是可以存在多个接口。

2、 在抽象类中可以拥有自己的成员变量和非抽象类方法,但是接口中只能存在静态的不可变的成员数据(不过一般都不在接口中定义成员数据),而且它的所有方法都是抽象的。

3、抽象类和接口所反映的设计理念是不同的,抽象类所代表的是“is-a”的关系,而接口所代表的是“like-a”的关系。

4、抽象类和接口是java语言中两种不同的抽象概念,他们的存在对多态提供了非常好的支持,虽然他们之间存在很大的相似性。但是对于他们的选择往往反应了您对问题域的理解。只有对问题域的本质有良好的理解,才能做出正确、合理的设计。

初学java请高手指教:

参照了一下几个比较好的博客:同时也非常感谢这些博主学到了很多!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值