Java基础13-抽象类、方法和接口

一、抽象类

1.什么是抽象类?

让我们先来看看百度是怎么解释的:

抽象类往往用来表征对问题领域进行分析、设计中得出的抽象概念,是对一系列看上去不同,但是本质上相同的具体概念的抽象。

其实,类本身就是一种抽象概念,但它又是具体的事物,所以就被称为具体类,抽象类似乎就是将本身我们人为划分的类中有共性的再进一步的进行提取划分,进一步抽象化,这样它就不具备实例化对象的特性,它是无法初始化的类。

2.为什么要有抽象类呢?它的意义何在?

我们来看这样一幅图。

我们可以创建出一个猫的对象,也可以创建出一个狗的对象,但是假如我们创建一个猫科动物的对象或是犬科动物的对象,那我们具体应该创建哪种动物呢?

是要创建猫呢还是狮子呢?是创建狗呢还是创建狼呢?再大一点,如果我们创建动物对象,那完了,这么多动物,到底是创建那个呢?难不成创建一个杂交物种?

所以,我们从这里可能会有点感觉到什么是抽象类和为什么要有抽象类的概念,因为无论是猫科动物类还是犬科动物类,都是不应该可以创建对象的,它们不应该被初始化。

但是我们一定要有他们来构建树,来继承和产生多态,这体现了java的面向对象的思想,那应该怎么办呢?

那我们就只要有限制它们,只有它们的子类,具体的类才能创建对象不就可以了吗,这也是抽象类的目的,防止不应该创建对象的类创建对象。

3.抽象类和方法的定义

抽象类和方法用 abstract 关键字来定义。

定义格式如下:

抽象类:

abstract class 类名 {

}

抽象方法:public abstract 返回值类型 方法名(参数);

public abstract class Employee {
//abstract关键字修饰的抽象类
    private String name;
    private int   number;
    private String job;
    private double salary;
    private double bounes;
//抽象方法,没有方法体!
    public abstract void work();
    public abstract void welfare();
}

注意:

①抽象方法必须写在抽象类中,但是抽象类中不一定要写抽象方法。

②任何子类必须重写父类的抽象方法,或者声明自身为抽象类。

③构造方法,类方法(用static修饰的方法)不能声明为抽象方法。

public abstract class MaintainDepartment extends Employee{
//这是一个Employee的子抽象类
    String CheckIn;
//既可以重写父类中的抽象方法,写成实现类
    public void work() {
        System.out.println("维护工作");
    }
    public void welfare() {
        System.out.println("撸猫");
    }
//也可以不重写抽象方法,由MaintainDepartment的子类去实现这个方法
    public abstract void skill();
}

4.抽象方法的意义和好处

抽象方法的意义在于,我们将可继承的方法体放在父类中,但父类没有办法做出任何子类都有意义的共同程序代码,这时我们用抽象方法,就算无法实现出方法的内容,还是可以定义出一种子类共同的协议。

抽象方法的好处就是多态。我们可以加入新的子类到程序中,也不必重写或修改处理这些类型的程序。

二、接口

1.什么是接口?

接口(英文:Interface),在JAVA编程语言中是一个抽象类型,是抽象方法的集合,接口通常以interface来声明。一个类通过继承接口的方式,从而来继承接口的抽象方法。

接口只描述所应该具备的方法,并没有具体实现,具体的实现由接口的实现类(相当于接口的子类)来完成。这样将功能的定义与实现分离,优化了程序设计。

比如说:电脑的电源插头就是一个接口,它就是为了实现充电的功能,让我们不必去关心怎么充电的(电流,电压...),只要将电源线插入这个接口就可以实现充电的功能能。

2.为什么要有接口?

先来看一个问题,类只能单继承,因为多重继承可能会出现“致命方块(形状看起来像扑克牌的方块)”的问题

所以,为了解决多继承的问题,又不会产生致命方块的问题,接口就华丽的出现在了我们的舞台。

接口是怎么解决这个问题的呢?

它把全部方法都设为了抽象的!这样子类就必须要实现此方法,因此虚拟机执行时就不会搞不懂用哪个继承的版本了。

3.接口的定义

接口定义时需要使用interface关键字。

注意:定义接口所在的仍为.java文件,虽然声明时使用的为interface关键字的编译后仍然会产生.class文件。这点可以让我们将接口看做是一种只包含了功能声明的特殊类。

public interface 接口名 {

抽象方法1;

抽象方法2;

抽象方法3;

}

public interface HighPoint {
public void autoPark();
public void autoRun();
}

4.类实现接口

类与接口的关系为实现关系,即类实现接口。实现的动作类似继承,只是关键字不同,实现使用implements。

在类实现接口后,该类就会将接口中的抽象方法继承过来,此时该类需要重写该抽象方法,完成具体的逻辑。

public class NewPhone extends Phone implements IPlay{
    public void Call() {
        System.out.println("键盘");
    }
    public void SendMessage() {
        System.out.println("按键");
    }
    public void PlayGame() {
        System.out.println("王者荣耀");
    }
}

5.接口和抽象类的异同点

相同点:

  • 都位于继承的顶端,用于被其他类实现或继承;
  • 都不能直接实例化对象;
  • 都包含抽象方法,其子类都必须覆写这些抽象方法;

区别:

  • 抽象类为部分方法提供实现,避免子类重复实现这些方法,提高代码重用性;接口只能包含抽象方法;
  • 一个类只能继承一个直接父类(可能是抽象类),却可以实现多个接口;(接口弥补了Java的单继承)
  • 抽象类是这个事物中应该具备的你内容, 继承体系是一种 is..a关系
  • 接口是这个事物中的额外内容,继承体系是一种 like..a关系

二者的选用:

优先选用接口,尽量少用抽象类;

需要定义子类的行为,又要为子类提供共性功能时才选用抽象类;

6.接口的成员特点

  • 接口中可以定义变量,但是变量必须有固定的修饰符修饰,public static final 所以接口中的变量也称之为常量,其值不能改变。后面我们会讲解static与final关键字
  • 接口中可以定义方法,方法也有固定的修饰符,public abstract
  • 接口不可以创建对象。
  • 子类必须覆盖掉接口中所有的抽象方法后,子类才可以实例化。否则子类是一个抽象类。

原文地址:https://www.cnblogs.com/LuckyGJX/p/8948332.html

时间: 2024-10-03 22:38:33

Java基础13-抽象类、方法和接口的相关文章

Java基础九--抽象类

Java基础九--抽象类 一.抽象类介绍 /*抽象类:抽象:笼统,模糊,看不懂!不具体. 特点:1,方法只有声明没有实现时,该方法就是抽象方法,需要被abstract修饰. 抽象方法必须定义在抽象类中.该类必须也被abstract修饰.2,抽象类不可以被实例化.为什么?因为调用抽象方法没意义.3,抽象类必须有其子类覆盖了所有的抽象方法后,该子类才可以实例化. 否则,这个子类还是抽象类. 1,抽象类中有构造函数吗? 有,用于给子类对象进行初始化. 2,抽象类可以不定义抽象方法吗? 可以的. 但是很

Java基础13:反射与注解详解

Java基础13:反射与注解详解 什么是反射? 反射(Reflection)是Java 程序开发语言的特征之一,它允许运行中的 Java 程序获取自身的信息,并且可以操作类或对象的内部属性. Oracle官方对反射的解释是 Reflection enables Java code to discover information about the fields, methods and constructors of loaded classes, and to use reflected fi

Java基础学习--抽象类与抽象函数

Java基础学习--抽象类与抽象函数 abstract class 抽象类不能制造对象,但是可以定义变量,赋给这个变量的一定是他非抽象子类的对象: 抽象类中的抽象函数没有函数体,例如:public abstract void move(); 一个抽象类可以没有任何抽象方法,所有的方法都有方法体,但是整个类是抽象的. 抽象类中所有的的抽象函数必需子类的覆盖,而非抽象函数不需要覆盖.因为子类会继承父类的函数,如果不去覆盖继承来的抽象函数,那么子类就含有抽象函数,含有抽象函数的类必须要声明为抽象类.

Java基础String的方法

Java基础String的方法 字符串类型写法格式如下: 格式一: String 变量名称; 变量名称=赋值(自定义或传入的变量值); 格式二: String 变量名称=赋值(自定义或传入的变量值);在输出时任何数据类型与字符串进行拼接,结果一般是字符串 1 public class StringFunc { 2 3 public static void main(String[] args){ 4 //字符串拼接 5 String str1; 6 str1 = "hello"; 7

Java 基础:hashCode方法

Writer:BYSocket(泥沙砖瓦浆木匠) 微博:BYSocket 豆瓣:BYSocket 一.前言 泥瓦匠最近被项目搞的天昏地暗.发现有些要给自己一些目标,关于技术的目标: 专注很重要.专注Java 基础 + H5(学习) 其他操作系统,算法,数据结构当成课外书博览.有时候,就是那样你越是专注方面越多对自己打击越大学啥啥都不好.今天带来Java基础:hashCode方法 二.hashCode方法 hash code(散列码,也可以叫哈希码值)是对象产生的一个整型值.其生成没有规律的.二者

java基础知识--抽象类与接口

抽象类与接口 1.Java 抽象类 1.引言: 在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象, 这样的类就是抽象类. 抽象类除了不能实例化对象之外,类的其它功能依然存在,成员变量.成员方法和构造方法的访问方式和普通类一样. 由于抽象类不能实例化对象,所以抽象类必须被继承,才能被使用.也是因为这个原因,通常在设计阶段决定要不要设计抽象类. 2.在Java语言中使用abstract class来定义

java基础知识总结--继承和接口

什么是继承?什么是接口?他们之间的区别和联系是什么? 什么是继承? 继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或新的功能,也可以用父类的功能.多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继承那个类即可.多个类称为子类,单独的那个类称之为父类,超类.或者是称为基类. 什么是接口? 接口在Java编程语言中是一个抽象类型,是抽象方法的集合,接口并不是类,编写接口的方法和类很相似,但是他们属于不同的概念,类描述对

Java基础(十一):接口

一.接口: 接口(英文:Interface),在JAVA编程语言中是一个抽象类型,是抽象方法的集合,接口通常以interface来声明.一个类通过继承接口的方式,从而来继承接口的抽象方法. 接口并不是类,编写接口的方式和类很相似,但是它们属于不同的概念.类描述对象的属性和方法.接口则包含类要实现的方法.除非实现接口的类是抽象类,否则该类要定义接口中的所有方法. 接口无法被实例化,但是可以被实现.一个实现接口的类,必须实现接口内所描述的所有方法,否则就必须声明为抽象类.另外,在 Java 中,接口

黑马程序员--java基础------继承,抽象,接口

-----------android培训.java培训.java学习型技术博客.期待与您交流!------------  继承 一.概述         继承是面向对象的一个重要特征.当多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继那个类即可.这时,多个类可以称为子类,单独的这个类称为父类或者超类. 这样类与类之间就存在了继承的关系.子类可以直接访问父类中的非私有的属性和行为.在代码中通过extends关键字表示继承关系.例: class

Java基础---继承、抽象、接口

一.概述         继承是面向对象的一个重要特征.当多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继那个类即可.这时,多个类可以称为子类,单独的这个类称为父类或者超类.例如:猫和豹子都是猫科动物,那么就可以说描述猫这个对象创建的类,是子类:而描述猫科动物这个对象创建的类,就是父类. 这样类与类之间就存在了继承的关系.子类可以直接访问父类中的非私有的属性和行为.在代码中通过extends关键字表示继承关系.例: class Sonexte