Java面向对象程序设计:抽象类,接口用法实例分析

本文实例讲述了Java面向对象程序设计:抽象类,接口用法。分享给大家供大家参考,具体如下:

本文内容:

  • 抽象类
  • 接口
  • 抽象类与接口的异同

首发日期:2018-03-24


抽象类:

  • 虽然已经有了父类,但有时候父类也是无法直接描述某些共有属性的,比如哺乳类和人类都会叫,而一般来说哺乳类这个父类并没有准确定义“叫”的属性的,显然应该由子类来决定怎么“叫”,但“叫”这个属性是共有的,那么可以把这个属性抽象化(抽象则代表没有具体内容),由子类来实现具体内容。
  • 普通类中无法定义抽象方法,所以定义了抽象类。
  • 由于抽象方法子类是必须重写的,不然会运行失败,所以可以确保子类重写抽象方法。
  • 抽象类可以有抽象方法,也可以没有抽象方法(没有抽象方法的抽象类),没有抽象方法时,子类继承不需要覆盖方法。
  • 抽象类不可以实例化,不能用new关键字创建对象。
  • 只有子类覆盖所有的抽象方法后,子类具体化,子类就可以创建对象。如果没有覆盖所有的抽象方法,子类还是抽象类。
  • 抽象方法一定定义在抽象类中,都需要abstract来修饰。抽象方法只允许声明,不允许定义。故此不能有大括号。抽象方法也不允许用final修饰。
  • 抽象类的定义格式:
  • 抽象方法的定义格式:
abstract class A{
 abstract void talk();//只能声明,不能具体定义
}

class B extends A{
 void talk() {
  System.out.println("run in B");//子类必须重写抽象方法
 }
}

public class Demo {

 public static void main(String[] args) {
  B b=new B();
  b.talk();

 }

}

接口:

  • 接口也是抽象的,抽象的原因与抽象类的原因类似。但用处不同,接口一般用于定义类的统一行为,而抽象类是“继承”。
  • 类重写一个接口中的所有抽象方法称为接口的实现。
  • 接口解决的问题:JAVA不直接支持多继承,但支持多实现。
  • 接口体中包含常量定义和方法声明,不允许对方法进行定义。
  • 接口可以说是完全抽象的抽象类。
  • 子类需要覆盖接口中的所有的抽象方法才能实例化,否则它是一个抽象类。
  • 如果一个类实现了一个接口,该类必须对接口中声明的方法进行定义。实现方法时方法的名字、返回类型、参数个数及参数类型必须与接口声明的一致。
  • 接口中,方法的修饰符默认是public abstract;接口中的常量的修饰符默认是public static final;所以子类中必须使用public来修饰定义的方法。
  • 接口的定义格式:
  • 接口的实现:
package 接口;

interface A{
 public static final int size=100;
 public abstract void talk();
// public abstract void eat();
}
class B implements A{
 //实现A中的抽象方法
 public void talk() {
  System.out.println("B talk");
 }
}
public class Demo {

 public static void main(String[] args) {
  new B().talk();

 }

}

注意:

  1. 如果一个类声明实现了一个接口,但没有实现接口的所有方法,那么这个类必须是抽象类
  2. 如果一个类没有完全实现接口中的所有方法,那么这个类必须是一个抽象类。

抽象类与接口的异同:

  • 相同:

    • 都是抽象的
    • 都不能被实例化
    • 都能包含抽象的方法,这些抽象的方法用于描述类具备的功能,但是不提供具体的实现。
  • 差异:
    • 接口是完全抽象
  • 概念设计区别:

    • 抽象类是可以有非抽象方法的,而接口是完全抽象的,其实可以这样理解他们的区别:A,B都是一个抽象类,但它们由于是“父类”,所以一般来说都是有一些具体属性的,可以说抽象类是一个父类的抽象化,但它离不开父类与子类的关系;但接口定义的是行为,它并没有强的父子类关系,它只是完全抽象的定义了一些行为作为标准,就像工厂里的元件的各种标准。
    • 而接口中的变量和方法的修饰符都显示出接口是一个“开放的固定的行为标准”

更多关于java相关内容感兴趣的读者可查看本站专题:《Java面向对象程序设计入门与进阶教程》、《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总》

希望本文所述对大家java程序设计有所帮助。

(0)

相关推荐

  • Java面向对象基础知识之抽象类和接口

    抽象类(abstract): 抽象类不能创建实例,它只能作为父类被继承.抽象类是从多个具体类中抽象出来的父类,它具有更高层次的抽象.从多个具有相同特征的类中抽象出一个抽象类,以这个抽象类作为其子类的模板,从而避免了子类的随意性. (1) 抽象方法只作声明,而不包含实现,可以看成是没有实现体的虚方法 (2) 抽象类不能被实例化 (3) 抽象类可以但不是必须有抽象属性和抽象方法,但是一旦有了抽象方法,就一定要把这个类声明为抽象类 (4) 具体派生类必须覆盖基类的抽象方法 (5) 抽象派生类可以覆盖基

  • Java面向对象之抽象类,接口的那些事

    目录 一.抽象类 1.抽象类概述 1.1 为什么要有抽象类?(抽象类的作用) 1.2 抽象类的定义 2. 抽象类特点 3.抽象类成员特点 4.抽象类案例 二.接口 1.接口概述 2.接口特点 3.接口成员特点 4.接口案例 5.类和接口的关系 1)类和接口之间的关系 2)接口和接口之间的关系 6.抽象类和接口的区别 总结 一.抽象类 1.抽象类概述 1.1 为什么要有抽象类?(抽象类的作用) 我先举一个例子:假设我们有一个父类动物类(Animal),还有继承自动物类的两个子类猫类(Cat)和狗类

  • Java 深入浅出解析面向对象之抽象类和接口

    目录 抽象类 声明抽象类 声明抽象方法 案例 使用规则 接口 声明接口 案例 接口特性 抽象类和接口的区别 抽象类 java语言,声明类时 abstract class Db{} 说明Db类为抽象类. java语言中,抽象方法是说没有方法的实现(方法体)此方法为抽象方法,只有抽象类和接口中才可以有抽象方法. 声明抽象类 声明抽象类很简单,加个abstract关节字就行. public abstract class AA { } 声明抽象方法 在抽象类中声明一个抽象方法,抽象方法没有方法体,就是说

  • Java面向对象基础之多态性,抽象类和接口

    一.多态性 多态是指一个对象可以拥有多种不同的形态,继承是实现多态的基础. 1.1 引用多态和方法多态 引用多态:父类引用可以指向本类的对象,也可以指向子类的对象 方法多态: 1.创建本类对象时,调用的方法为本类方法: 2.创建子类对象时,调用的方法为子类重写或继承的方法. 首先建立父类Animal,包含一个eat()方法,如下代码所示: public class Animal { public void eat(){ System.out.println("动物可以吃东西"); }

  • Java面向对象程序设计:抽象类,接口用法实例分析

    本文实例讲述了Java面向对象程序设计:抽象类,接口用法.分享给大家供大家参考,具体如下: 本文内容: 抽象类 接口 抽象类与接口的异同 首发日期:2018-03-24 抽象类: 虽然已经有了父类,但有时候父类也是无法直接描述某些共有属性的,比如哺乳类和人类都会叫,而一般来说哺乳类这个父类并没有准确定义"叫"的属性的,显然应该由子类来决定怎么"叫",但"叫"这个属性是共有的,那么可以把这个属性抽象化(抽象则代表没有具体内容),由子类来实现具体内容

  • Java工厂模式定义与用法实例分析

    本文实例讲述了Java工厂模式定义与用法.分享给大家供大家参考,具体如下: 一 代码 // 抽象产品 interface Block { public void print(); } // 具体产品 class IBlock implements Block { @Override public void print() { System.out.println("我是一个I形的方块!"); } } // 具体产品 class LBlock implements Block { @Ov

  • Java局部内部类原理与用法实例分析

    本文实例讲述了Java局部内部类原理与用法.分享给大家供大家参考,具体如下: 一 点睛 如果把一个内部类放在方法中定义,那么这个内部类就是一个局部内部类,局部内部类仅在方法里有效. 由于局部内部类不能在外部类的方法以外的地方使用,因此局部内部类也不能使用控制符合static修饰符修饰. 如果需要用局部内部类定义变量.创建实例或派生子类,那么都只能在局部内部类所在的方法中进行. 二 代码 public class LocalInnerClass { public static void main(

  • Java反射技术原理与用法实例分析

    本文实例讲述了Java反射技术原理与用法.分享给大家供大家参考,具体如下: 本文内容: 产生反射技术的需求 反射技术的使用 一个小示例 首发日期:2018-05-10 产生反射技术的需求: 项目完成以后,发现需要增加功能,并且希望增加功能并不需要停止项目运行. 在希望不关停项目运行的情况下,于是考虑到将功能都放到一个单独的项目之外的模块中,每一个功能实现都从这个模块中获取[实际上这个考虑应该是项目开始前就考虑,这个例子可能不是很好].于是就有了反射的产生.(这种思想有点类似工厂模式,如果学过设计

  • PHP面向对象程序设计之接口用法

    接口是PHP面向对象程序设计中非常重要的一个概念.本文以实例形式较为详细的讲述了PHP接口的用法.具体如下: 接口:interface 在PHP中,我们可以规定,一个对象应该具有哪些公共的外部操作,即可使用interface来规定. 公共的方法就是接口.用于规定一个对象应该用于哪些公共的操作方法(接口),这个也叫接口(公共操作方法的集合) 即:接口(interface结构,公共方法集合) 公共方法(接口方法) 定义:用于限定某个对象所必须拥有的公共操作方法的一种结构,称之为接口(interfac

  • Android编程学习之抽象类AbsListView用法实例分析

    本文实例讲述了Android编程学习之抽象类AbsListView用法.分享给大家供大家参考,具体如下: 一.继承关系 public abstract class AbsListView extends AdapterView <T extendsAdapter> java.lang.Object          android.view.View                android.view.ViewGroup                       android.widg

  • Java数组队列概念与用法实例分析

    本文实例讲述了Java数组队列概念与用法.分享给大家供大家参考,具体如下: 一.队列的概念 (1)队列也是一种线性结构 (2)相比数组,队列对应的操作是数组的子集 (3)只允许在一端插入数据操作,在另一端进行删除数据操作,进行插入操作的一端称为队尾(入队列),进行删除操作的一端称为队头(出队列) (4)队列是一种先进先出的数据结构(FIFO) 此处我们先来学习一下顺序队列 ,顺序队列 就是用数组实现:比如有一个n个元素的队列,数组下标0的一端是队头,入队操作就是通过数组下标一个个顺序追加,不需要

  • C#中IEnumerable接口用法实例分析

    本文实例讲述了C#中IEnumerable接口用法.分享给大家供大家参考.具体分析如下: 枚举数可用于读取集合中的数据,但不能用于修改基础集合. 最初,枚举数定位在集合中第一个元素前.Reset 方法还会将枚举数返回到此位置.在此位置上,Current 属性未定义.因此,在读取 Current 的值之前,必须调用 MoveNext 方法将枚举数提前到集合的第一个元素. 在调用 MoveNext 或 Reset 之前,Current 返回同一对象.MoveNext 将 Current 设置为下一个

  • go语言接口用法实例分析

    本文实例讲述了go语言接口用法.分享给大家供大家参考.具体分析如下: 首先定义一个接口: 复制代码 代码如下: type I interface{     Get() int     Put(int)   } 这段话就定义了一个接口,它包含两个函数Get和Put 好了,我的一个接口实现了这个接口: 复制代码 代码如下: type S stuct {val int} func (this *S) Get int {     return this.val } func (this *S)Put(v

  • django框架面向对象ORM模型继承用法实例分析

    本文实例讲述了django框架面向对象ORM模型继承用法.分享给大家供大家参考,具体如下: Django ORM对模型继承的支持,将python面向对象的编程方法与数据库面向关系表的数据结构结合的很巧妙.支持三种风格的模型继承. 1.抽象类继承:父类继承自models.Model,但不会在底层数据库中生成相应的数据表,父类的属性列存储在其子类的数据表中. 2.多表继承:多表继承的每个模型类都在底层数据库中生成相应的数据表管理数据. 3.代理模型继承:父类用于在底层数据库中管理数据表,而子类不定义

随机推荐