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

目录
  • 抽象类
    • 声明抽象类
    • 声明抽象方法
    • 案例
    • 使用规则
  • 接口
    • 声明接口
    • 案例
    • 接口特性
  • 抽象类和接口的区别

抽象类

java语言,声明类时 abstract class Db{} 说明Db类为抽象类。 java语言中,抽象方法是说没有方法的实现(方法体)此方法为抽象方法,只有抽象类和接口中才可以有抽象方法。

声明抽象类

声明抽象类很简单,加个abstract关节字就行。

public abstract class AA {
}

声明抽象方法

在抽象类中声明一个抽象方法,抽象方法没有方法体,就是说现在这个方法就是个空架子。

public abstract class AA {
    public abstract int a(int i);
}

案例

描述:

  • 小米手机生产厂生产手机,小米手机厂内部分为两个分厂,一个是红米手机厂,一个是黑米手机厂。
  • 红米手机特点是屏幕大,充电快。
  • 黑米手机特点是发热,音质好。

实现:

  • 先声明一个抽象类 小米手机厂类,小米手机厂类里有两个抽象方法分别为a和b,还有一个定义过的方法c
  • 再声明一个红米手机厂类继承小米手机厂,并且实现方法a和方法b
  • 再声明一个黑米手机厂类继承小米手机厂,并且实现方法a和方法b

代码:

Mi.java

public abstract class Mi {
    public abstract void a();
    public abstract void b();
    public void c(){
        System.out.println("小米手机好");
    }
}

Hong.java

public class Hong extends Mi {

    @Override
    public void a() {
        System.out.println("红米手机屏幕大");
    }

    @Override
    public void b() {
        System.out.println("红米手机充电快");
    }
}

Hei.java

public class Hei extends Mi {

    @Override
    public void a() {
        System.out.println("黑米手机发热");
    }

    @Override
    public void b() {
        System.out.println("黑米手机音质好");
    }
}

测试:

public class Test {
    public static void main(String[] args) {
        Hong hong = new Hong();
        Hei hei = new Hei();
        hong.a();
        hong.b();
        hong.c();
        hei.a();
        hei.b();
        hei.c();
    }
}

这个案例的主要描述了抽象方法的一个应用场景,红米和黑米是小米的一个分支,他们有小米的部分功能,但是他们还想有自己的特色。那么就可以通过实现小米的两个抽象方法来实现自己的特色。并且小米只声明了两个抽象方法,限制了两个子厂的特色,让他们只能增加两个特色,不能无限制的随意增加多个特色。

使用规则

使用规则

抽象类必须被继承,抽象方法必须被重写。

抽象类中的抽象方法只需声明,无需实现,没有方法体

抽象类不能被实例化,抽象类不一定要包含抽象方法,而定义抽象方法的类必须是抽象类。

抽象类包含的抽象方法必须在其子类中被实现,否则该子类也必须是抽象类。

抽象类可以有构造方法供子类实例化对象

抽象类不能直接实例化使用,一般用的是抽象类的子类,

A a = new B();

A和B之间的关系,继承关系,接口实例关系。

类:方法+属性+静态程序段+初始化程序段

抽象类:方法+抽象方法+属性+静态程序段+初始化程序段

抽象类本质

1.从类的组成上看其是抽象方法和非抽象方法的集合,还有属性(常量)。

2.从设计的角度来看,实际上抽象类定义了一套规范(抽象方法)。(规范)

接口

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

声明接口

interface关键字声明接口AA

public interface AA {
}

案例

描述:

富士康加工厂里有两个分厂,分别是加工华为手机和苹果手机。每个手机是由电池、芯片、屏幕这三个硬件组成。两个品牌的手机都是由这三个硬件组成但是硬件的型号不同。

但是这两个厂都有一个统一的加工程序把手机组装

实现:

声明富士康接口,接口内声明一个抽象方法用来组装手机。

华为和苹果两个类分别实现富士康接口,并且实现里面的方法。

富士康接口

public interface Fu {
    void zhuang();
}

华为加工厂

public class HuaWei implements Fu {
    private final String xin = "麒麟芯片";
    private final String dian = "6000am电池";
    private final String ping = "大猩猩屏幕";

    @Override
    public void zhuang() {
        System.out.printf("华为手机:%s,%s,%s %n", xin, dian, ping);
    }
}

苹果加工厂

public class Iphoe implements Fu {
    private final String xin = "A15芯片";
    private final String dian = "3000am电池";
    private final String ping = "小猩猩屏幕";

    @Override
    public void zhuang() {
        System.out.printf("苹果手机:%s,%s,%s %n", xin, dian, ping);
    }
}

测试

public class Test {
    public static void main(String[] args) {
        HuaWei huaWei = new HuaWei();
        Iphoe iphoe = new Iphoe();
        huaWei.zhuang();
        iphoe.zhuang();
    }
}

接口特性

接口中每一个方法也是隐式抽象的,接口中的方法会被隐式的指定为 public abstract(只能是 public abstract,其他修饰符都会报错)。

接口中可以含有变量,但是接口中的变量会被隐式的指定为 public static final 变量(并且只能是 public,用 private 修饰会报编译错误)。

接口中的方法是不能在接口中实现的,只能由实现接口的类来实现接口中的方法。

抽象类和接口的区别

  • 抽象类中的方法可以有方法体,就是能实现方法的具体功能,但是接口中的方法不行。
  • 抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是 public static final 类型的。
  • 接口中不能含有静态代码块以及静态方法(用 static 修饰的方法),而抽象类是可以有静态代码块和静态方法。
  • 一个类只能继承一个抽象类,而一个类却可以实现多个接口。

到此这篇关于Java 深入浅出解析面向对象之抽象类和接口的文章就介绍到这了,更多相关Java 抽象类内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Java 中的类和对象详情

    目录 1.类的定义 2.类中变量的类型 3.构造方法 4.重载方法 5.继承 5.1 重写方法 6.创建对象 7.访问实例变量和方法 8.比较对象 8.1 使用 == 比较对象 8.2 使用 equals() 比较对象 类可以看成是创建Java对象的模板 1.类的定义 public class Dog { String name; int age; void eat() { } void sleep() { } } 2.类中变量的类型 局部变量:在方法或语句块中定义的变量被称为局部变量.变量声明

  • 浅谈javaSE 面向对象(Object类toString)

    每一个对象,都有一个在内存中的地址哈希值,这个哈希值是十六进制的 调用Object对象的hashCode()方法,返回这个对象的哈希值 调用Integer.toHexString()方法,转换十六进制 调用Object对象的toString()方法,得到:类名@哈希值 通常我们会复写toString()方法,因为默认的没有太大意义 实现原理是类的反射 当我们创建一个对象,会在硬盘上生成xxx.class的文件,jdk定义了Class类来描述这些class文件 调用Object对象的getClas

  • 深入浅出分析Java 类和对象

    目录 一.什么是类 二.Java的类和C语言的结构体异同 三.类和类的实例化 类的声明 实例化的对象,成员遵循默认值规则 类的实例化 静态属性(静态成员变量) 四.构造方法 创建构造方法 this 一.什么是类 类(Class)是面向对象程序设计(OOP,Object-Oriented Programming)实现信息封装的基础.类是一种用户自定义的引用数据类型,也称类类型.每个类包含数据说明和一组操作数据或传递消息的函数,类的实例称为对象 类的实质是一种引用数据类型,类似于 byte,shor

  • Java十分钟理清面向对象与类的核心

    什么是对象? 一切客观存在的事物都是对象 对象的组成 属性.行为 类是什么? 类是对大量对象共性的抽象 类是客观事物在人脑中的主观反映 类是创建对象的模板 类的组成 属性.行为 简单的说,一个类就是把公有的特征写在一起,然后由这个类创建的对象,都会都这个属性. 例如人这个类 属性会吃饭,会说话.我们就是对象,我们属于人这个类,因此我们也会吃饭说话. Java中类的定义 语法: public class Student{ //在这里面写成员属性.成员方法 } //Student就是这个类的名字,这

  • JavaSE的类和对象你真的了解吗

    目录 1.基本概念 1.1面向对象 1.2类和对象 2.类的定义及使用 2.1定义 2.2类的实例化 3.this引用 3.1访问成员变量 3.2访问成员方法 3.3this引用的特性 4.构造方法 4.1构造方法的特点 4.2this在构造方法中使用 总结 1.基本概念 首先我们需要弄清楚几个概念:面向对象是什么.类是什么.对象又是什么?还是逐个来说 1.1面向对象 我们常说Java是面向对象的语言,C语言是面向过程的语言,那面向对象是什么,它和面向过程的区别在哪? 面向对象是解决问题的一种思

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

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

  • Java 深入浅出分析Synchronized原理与Callable接口

    目录 一.基本特点 二.加锁工作过程 偏向锁 轻量级锁 重量级锁 三.其他的优化操作 锁消除 锁粗化 四.Callable 接口 一.基本特点 1. 开始时是乐观锁, 如果锁冲突频繁, 就转换为悲观锁. 2. 开始是轻量级锁实现, 如果锁被持有的时间较长, 就转换成重量级锁. 3. 实现轻量级锁的时候大概率用到的自旋锁策略 4. 是一种不公平锁 5. 是一种可重入锁 6. 不是读写锁 二.加锁工作过程 JVM 将 synchronized 锁分为 无锁.偏向锁.轻量级锁.重量级锁状态.会根据情况

  • Java深入数据结构理解掌握抽象类与接口

    目录 abstract abstract修饰方法 抽象类的匿名子类对象 final关键字 接口 接口相关规则 接口的特性 抽象类和接口的异同 内部类 总结 abstract abstract介绍:可以用于修饰:类(抽象类).方法(抽象方法) abstract修饰类: ①此类不能实例化(也就是不能创建这个类的对象) ②虽然自己不能实例化,但是子类会调用父类的构造器,所以抽象类中一定有构造器 abstract修饰方法 ①抽象方法只有方法的声明没有方法体,所在的类一定是抽象类.因为如果类不是抽象的,那

  • 解析JavaSe的抽象类和接口

    目录 1. 抽象类和抽象方法 2. 相关面试题 1.抽象类必须要有抽象方法吗? 2.普通类和抽象类有哪些区别? 3.抽象类能使用 final 修饰吗? 3. 接口 3.1 接口中的常量 3.2 接口中的方法 3.2.1 接口中的普通方法 3.2.2 接口中的静态方法 3.2.3 接口中的默认方法 3.3 接口中的接口和枚举类 3.4 接口和抽象类 总结 1. 抽象类和抽象方法 抽象方法和抽象类必须使用abstract修饰符来定义,有抽象方法的类只能被定义成抽象类,抽象类里可以没有抽象方法.抽象方

  • Java中的多态、抽象类和接口详解

    目录 1.多态 1.1 向上转型 1.2 向下转型 1.3 实现多态的条件 1.4多态的特点与使用 1.5多态的应用 以父类类型作为方法的参数 使用父类型作为方法的返回值 1.6 多态的注意点 2.抽象类 2.1 abstract关键字 2.2 抽象方法和普通方法的区别 2.3 抽象类和普通类的区别 2.4 本质 2.5 抽象类局限 3.接口 3.1 定义接口 3.2 使用接口 3.3 实现多个接口 3.4 jdk8接口新特性 1.多态 一个特定类型的变量,可以引用多个不同类型的对象,并且能自动

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

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

  • 详细解析Java中抽象类和接口的区别

    在Java语言中, abstract class 和interface 是支持抽象类定义的两种机制.正是由于这两种机制的存在,才赋予了Java强大的 面向对象能力.abstract class和interface之间在对于抽象类定义的支持方面具有很大的相似性,甚至可以相互替换,因此很多开发者在进 行抽象类定义时对于abstract class和interface的选择显得比较随意.其实,两者之间还是有很大的区别的,对于它们的选择甚至反映出对 于问题领域本质的理解.对于设计意图的理解是否正确.合理

  • 深入浅出分析Java抽象类和接口【功能,定义,用法,区别】

    本文实例讲述了Java抽象类和接口.分享给大家供大家参考,具体如下: 对于OOP编程来说,抽象是它一大特征之一.在Java中,可以通过两种形式来体现OOP的抽象:抽象类和接口. 这两者有相似之处也有很大的不同之处. 一.抽象类 在了解抽象类之前,先了解下抽象方法.抽象方法是一种特殊的方法:只有声明,而没有具体的实现.抽象方法的声明格式为: abstract void fun(); 抽象方法必须用abstract关键字进行修饰.如果一个类含有抽象方法,则称这个类为抽象类,这个类就必须在类前用abs

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

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

  • java 抽象类和接口的区别详细解析

    abstractclass和interface是Java语言中对于抽象类定义进行支持的两种机制,正是由于这两种机制的存在,才赋予了Java强大的面向对象能力.abstractclass和interface之间在对于抽象类定义的支持方面具有很大的相似性,甚至可以相互替换,因此很多开发者在进行抽象类定义时对于abstractclass和interface的选择显得比较随意.其实,两者之间还是有很大的区别的,对于它们的选择甚至反映出对于问题领域本质的理解.对于设计意图的理解是否正确.合理.本文将对它们

随机推荐