前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java 基础(八) 抽象

Java 基础(八) 抽象

作者头像
Rikka
发布2022-01-19 18:07:09
2420
发布2022-01-19 18:07:09
举报
文章被收录于专栏:rikkarikka

1. 概念

  • 抽象函数—表达概念而无具体实现代码的函数
  • 抽象类—表达概念而无法实例化对象的函数

2. 特点

  • 带有 abstract 修饰符的函数
  • 有抽象函数的类一定是抽象类
  • 抽象类不能制造对象, 但是可以定义变量
    • 任何继承了抽象类的非抽象类的对象可以赋给这个变量

实现抽象函数

  • 继承自抽象类的子类必须实现基类的抽象函数, 否则他自己就成为抽象函数
代码语言:javascript
复制
public abstract class AbstractClass{
    public abstract int abstractMethod();
}

与 C++ 相比

C++

Java

虚函数

普通函数

纯虚函数

抽象函数

抽象类

抽象类

虚基类

接口

C++ 和 Java 实现多态的方式不同, 在 Java 中, 普通的函数就相当于 C++ 中的 virtual function, 从向上造型时候的例子可以看出, 即使变量本身是父类的, 但实际管理的对象是子类的, 默认调用的都是子类的函数, 如:

代码语言:javascript
复制
public class A {
    public void print(){System.out.println("A");}

    public static void main(String[] args) {
        A temp = new B();
        temp.print();
    }
}

public class B extends A {
    @Override
    public void print() {System.out.println("B");}
}

输出:

代码语言:javascript
复制
B

同理, 在存放基类对象的容器中添加子类的对象, 调用这些对象的函数时永远都是调用自己类的.

在 C++ 中默认的函数没有这种效果,而给函数加上 virtual 关键字后, 可以实现 Java 中的效果, 如:

代码语言:javascript
复制
#include<iostream>
#include <vector>
using namespace std;
class A {
public:
 A() {}
 ~A() {}
 void print() { cout << "A" << endl; }
 virtual void print_v() { cout << "A" << endl; }
};
class B :public A
{
public:
 B() {}
 ~B() {}
 void print() { cout << "B" << endl; }
 virtual void print_v() { cout << "B" << endl; }
};
int main()
{
 A* temp = new B();
 temp->print();
 temp->print_v();
}

输出:

代码语言:javascript
复制
A
B

需要注意的是, C++ 中实现多态必须使用指针, 否则无论何时都只会调用静态类型( 变量类型 )的成员函数. 要在 C++ 中实现上文中 CD 存放的例子, 可以用容器vector<Item*>, 只需注意存放的类型必须为 Item*, 将需要在子类中重写的函数设为 virtual 即可.

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-12-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 概念
  • 2. 特点
  • 实现抽象函数
  • 与 C++ 相比
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档