抽象类和接口

原创 2016年05月30日 20:10:25

一 抽象类
抽象:没有具体的解决方案,不能实例化,但是提供了一个规范。
抽象类:在class前加修饰符abstract的类。在抽象类中只做规定,不具体实现某种方法,而在其子类中实现这些方法。
例如对于水果来说,我们找不到一个具体的对象来表示它,因为苹果香蕉橘子都是水果,这时就可以将水果设置为抽象类,他不能实例化。

如果在一个类中有一个或多个抽象的方法,即方法有修饰符abstract,这个类就必须是抽象的。
使用抽象类时要注意的问题:1.如果在类中的方法都是非抽象的,这个类也可以声明为抽象的。
2.在抽象类中可以有非抽象的方法。
3.不能用抽象类直接创建对象,因为抽象类不具体,不能实例化。

抽象类:

public abstract class AbstractClass {
    public abstract void method1();   //抽象方法,抽象类的子类在类中必须实现
    public abstract void method2(); 
    public void method3(){//非抽象的方法
        System.out.println("------------------------");
    }
}

二 接口
接口是对象之间进行沟通的桥梁。它能为其他对象提供调用的规范,但是不公开实现。

接口是一种特殊的抽象类,接口中的所有的方法都是抽象的,不能有具体的实现,而是由另一个类来实现(implements)接口,重写其中的方法。
例如:对手机来说,只需要用他的比如听歌,照相等功能,而不用知道这些功能是如何实现的,就可以将这些功能设置为接口。

照相的接口:

public interface ITakePhoto {
    public void takePhoto();
}

听歌的接口

public interface IMusic {
    public void music();
}

手机类

//手机类,实现了照相和听歌的功能
public class Phone implements ITakePhoto,IMusic{
    //重写接口的方法
    @Override
    public void music() {
        // TODO Auto-generated method stub
        System.out.println("---I can listen music---");
    }
    @Override
    public void takePhoto() {
        // TODO Auto-generated method stub
        System.out.println("---I can takephoto---");
    }
}

测试类:

public class Test {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Phone phone = new Phone();
        phone.takePhoto();
        phone.music();
    }
}

这样就给手机添加了功能。

implements和extends的区别:前者是实现接口,可以在一个类中实现多个接口,而且必须重写接口中的所有的方法。后者是继承类,一个子类只能继承一个父类,不能多继承,而且必须满足is a的关系,子类不用完全重写父类中的方法

抽象类和接口的区别、为什么用抽象类。

面试被问到抽象类的问题。答得稀烂。。。  网上再学习了一次,在这里记下看到各位大虾的金言。  一、抽象类:  在面向对象领域,抽象类主要用来进行类型隐藏。那什么是类型隐藏呢?我们可以构造出一...
  • wusuopuBUPT
  • wusuopuBUPT
  • 2013年03月18日 17:42
  • 10331

接口和抽象类的区别---相信你看完不会再混淆了

一、引言 我想,对于各位使用面向对象编程语言的程序员来说,“接口”这个名词一定不陌生,但是不知各位有没有这样的疑惑:接口有什么用途?它和抽象类有什么区别?能不能用抽象类代替接口呢?而且,作为程序员,一...
  • wenwen091100304
  • wenwen091100304
  • 2015年09月12日 11:09
  • 22268

unity3D__复习(接口与抽象类的区别)

欢迎大家关注我的日志,简单的复习下以前的知识: 一、抽象类: 1.在C#中使用关键字 abstract 来定义抽象类和抽象方法。 2.不能初始化的类被叫做抽象类,它们只提供部分实现,...
  • qq_23337215
  • qq_23337215
  • 2014年12月26日 20:07
  • 532

总结抽象类与接口的关联和区别

对于面向对象编程来说,抽象是它的一大特征之一。在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类。这两者有太多相似的地方,又有太多不同的地方。很多人在初学的时候会以为它们可以随意互换使用,...
  • hupoling
  • hupoling
  • 2016年09月06日 10:26
  • 452

抽象类和接口的区别是什么?在使用上是如何选择的?

定义: 1、声明方法的存在而不去实现它的类被叫做抽像类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstra...
  • hjp1137
  • hjp1137
  • 2015年09月16日 15:27
  • 926

小鸦-Java8抽象类与接口的区别

前序: 被不少考官问过, 这次想重新整理一下.我们以下面的表格作为参考 原地址: http://www.importnew.com/12399.html (侵删)首先, 我们必须明白, 抽象类是什么...
  • u014041227
  • u014041227
  • 2017年03月28日 00:59
  • 288

抽象类、接口的区别 和 抽象类可以不实现接口的全部方法

抽象类和接口的区别   抽象类里面可以有非抽象的方法,接口里只能有抽象方法。   抽象类中的抽象方法声明时不能有大括号,而接口中的所有方法都没有大括号。    抽象类(abstract...
  • taoshengyijiuzt
  • taoshengyijiuzt
  • 2015年06月16日 20:58
  • 1619

浅析C#中抽象类和接口的区别

文章《浅析C#中接口的重要性》中讲述了如何声明和使用接口。但是C#具有abstract关键字形成的抽象类,那么二者我们该如何选择呢!C#允许把类和函数声明为abstract。抽象类不能实例化,而抽象函...
  • wangshubo1989
  • wangshubo1989
  • 2015年09月01日 09:00
  • 3389

接口和抽象类的异同——加入Java8的特性。

Java中,抽象类和接口有相似的地方。下面我们就来细说说接口和抽象类的异同。首先是相同的地方:1. 接口和抽象类都能定义方法和属性。 2. 接口和抽象类都是看作是一种特殊的类。大部分的时候,定义的...
  • a907691592
  • a907691592
  • 2016年06月06日 20:11
  • 2823

面试题_抽象类和接口的区别

含有abstract修饰符的class 即为抽象类,abstract类不能创建实例对象,含有abstract的方法的类必须定义为abstract class ,abstract class 里的方法不...
  • baidu_31337243
  • baidu_31337243
  • 2015年09月15日 21:35
  • 1728
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:抽象类和接口
举报原因:
原因补充:

(最多只允许输入30个字)