文档章节

java接口和抽象类的不同

effto
 effto
发布于 2016/04/13 19:23
字数 1710
阅读 17
收藏 0

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

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

   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请高手指教:


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

http://www.cnblogs.com/dolphin0520/p/3811437.html

http://dev.yesky.com/436/7581936.shtml

http://blog.csdn.net/chenssy/article/details/12858267

http://peiquan.blog.51cto.com/7518552/1271610


 

© 著作权归作者所有

effto
粉丝 3
博文 56
码字总数 28418
作品 0
长春
私信 提问
JAVA接口的概念、分类及与抽象类的区别

Java接口(Interface),是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(...

郭二翔
2011/12/17
0
0
115个Java面试题及回答

解释下可用的线程状态. 在执行期间, 线程会处于以下状态中的一种: Runnable: 线程已准备就绪, 但没有立即运行. Running: 处理器正在执行的线程代码. Waiting: 处于阻塞状态的线程, 等待外部某...

Yamazaki
2014/04/25
0
0
java程序员基础进阶篇,万丈高楼平地起

一.final,finally,finalize 三者区别 Final是一个修饰符: 当final修饰一个变量的时候,变量变成一个常量,它不能被二次赋值 当final修饰的变量为静态变量(即由static修饰)时,必须在声明这...

启示录是真的
2018/05/26
0
0
【转】115个Java面试题和答案——终极列表

本文我们将要讨论Java面试中的各种不同类型的面试题,它们可以让雇主测试应聘者的Java和通用的面向对象编程的能力。下面的章节分为上下两篇,第一篇将要讨论面向对象编程和它的特点,关于Jav...

一只死笨死笨的猪
2014/09/30
0
0
深入理解Java中的抽象类和接口

对于面向对象编程来说,抽象是它的一大特征。在Java中,可以通过两种形式来体现OOP的抽象:抽象类和接口。这两者有太多向内的地方,又有太多不同的地方。很多人在初学的时候以为它们可以随意...

FunGa
2015/11/03
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Linux输入法fcitx的安装问题

Fcitx 总共要安装的包如下 fcitxfcitx-binfcitx-config-commonfcitx-config-gtk | fcitx-config-gtk2fcitx-datafcitx-frontend-allfcitx-frontend-gtk2fcitx-frontend-gtk3......

CHONGCHEN
今天
4
0
网络基础

前言: 最近整理一些以前的学习笔记(有部分缺失,会有些乱,日后再补)。 过去都是存储在本地,此次传到网络留待备用。 计算机网络的功能: 1.数据通信; 2.资源共享; 3.增加数据可靠性; 4....

迷失De挣扎
今天
7
0
spring boot升级到spring cloud

1、先升级spring boot 版本到2.1.3 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>2.1.3.RELEAS......

moon888
今天
12
0
从蓝鲸视角谈DevOps

DevOps源于Development和Operations的组合 常见的定义 DevOps是一种重视“软件开发人员(Dev)”和“IT运维技术人员(Ops)”之间沟通合作的文化、运动或惯例。透过自动化“软件交付”和“架构变...

嘉为科技
今天
1
0
微服务设计 笔记

微服务设计 一、微服务架构理论 1.六边形架构 1)六边形架构(Hexagonal Architecture),又称为端口和适配器架构风格;使用适配器与外界进行交互,外界通过应用层API与内部进行交互。 2)经典...

啃不动地大坚果
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部