欢迎来到代码驿站!

JAVA代码

当前位置:首页 > 软件编程 > JAVA代码

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

时间:2022-12-02 11:42:57|栏目: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使用@Validated注解进行参数验证的方法

栏    目:JAVA代码

下一篇:springboot 自定义配置Boolean属性不生效的解决

本文标题:Java 深入浅出解析面向对象之抽象类和接口

本文地址:http://www.codeinn.net/misctech/220376.html

推荐教程

广告投放 | 联系我们 | 版权申明

重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:914707363 | 邮箱:codeinn#126.com(#换成@)

Copyright © 2020 代码驿站 版权所有