`
banxi1988
  • 浏览: 151897 次
  • 性别: Icon_minigender_1
  • 来自: 桂林
社区版块
存档分类
最新评论

Java中的接口抽象方法与C++中的抽象类纯虚函数

阅读更多
Java中的接口抽象方法与C++中的抽象类纯虚函数
接着我的文章当中C++静态绑定和动态绑定的例子.
一个简单的形状类:
如下:
class Figure{
public:
	Figure(){
		_name = "Figure";
	}
    virtual string getName() const{
    	return _name;
    }

	virtual double area()const = 0;
private:
	string _name;

};

形状表示一种抽象的概念.所以如果是在Java中的话Figure应该定义为一个抽象类.类名前用abstract来修饰.
在C++中,抽象函数不是直接用abstract关键字来指定的.
在C++中包含有纯虚函数的类的被称为抽象类.这个跟Java中抽象方法有相同点.
在C++中定义纯虚函数格式如下:
virtual<返回值类型><函数名>(<形式参数表>)=0;
即纯虚函数的定义是在虚函数定义的基础上,再让函数等于0即可.这只是一种表示纯虚函数的标志.而不是指它的返回值是0.
上面的例子中.对于对一个形状的面积来讲确实是一个无法确定的概念,就好像说
如果调用这个Figure类的求面积方法area()的结果是未定义的一样.
因为只有针对具体的形状如圆,三角形.矩形等才有意义.

与C++的抽象类中纯虚函数最对应的是Java的抽象类中的抽象方法.
在Java中如果一个类中有一个方法是抽象的,那么这个类也就是抽象的.需要用abstract修饰类名.(除非是一个特殊的类型如枚举).
不管是对于 C++还是Java而言,抽象类中抽象方法(C++中的纯虚函数)
Java中方法修饰中的abstract与private,static,final关键字是不互斥的.(道理显然)
显然可见的是,抽象类不能实例化,主要是因为调用抽象类中的抽象方法是没有意义的.
在Java中下面的代码有出现编译错误,原因就是ColoredPoint类中的super关键字试图访问Point类中的抽象toString()方法.
abstract class Point{
	int x,y;
	public abstract String toString();
}
class ColoredPoint extends Point{
	int color;

	@Override
	public String toString() {
		return super.toString()+":color "+color;
	}
	
}


但是在抽象类中的方法中可以调用抽象方法:
如下测试所示(下面程序运行时没有任何输出,原因可能是因为move()方法调用的toString()是Point类中的toString()而不是ColoredPoint类中的toString().
package me.banxi.oo;

abstract class Point{
	int x,y;
	public abstract String toString();
	void move(int x,int y){
		toString();
	}
}
class ColoredPoint extends Point{
	int color;

	@Override
	public String toString() {
		return ":color "+color;
	}
	
}
public class TestAbstractTypeMethod {
	public static void main(String[] args) {
		ColoredPoint cPoint = new ColoredPoint();
		cPoint.move(10, 9);
	}

}

分享到:
评论

相关推荐

    java抽象类与接口实例java抽象类与接口实例

    java抽象类与接口实例java抽象类与接口实例java抽象类与接口实例java抽象类与接口实例java抽象类与接口实例java抽象类与接口实例java抽象类与接口实例java抽象类与接口实例java抽象类与接口实例java抽象类与接口实例...

    Qt/C++抽象类和纯虚函数讲解示例源代码

    该资源是博主博客的源代码,博客上有详细讲解Qt/C++关于纯虚函数和抽象基类原理讲解和示例用法解释,博客地址如下: https://blog.csdn.net/naibozhuan3744/article/details/94488200 其中编译环境为QtCreator4.5.0...

    纯虚函数接口 实现的dll动态链接库,

    纯虚函数实现接口并且做成了dll动态链接库

    C++的虚函数和JAVA的抽象函数

    java中的抽象函数和c++ 的虚函数和纯虚函数

    纯虚函数与抽象类的概念

    系统的介绍C++里面的虚函数与抽象类概念,并举例概述

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

    抽象类和接口的区别 在Java语言中, abstract class 和interface 是支持抽象类定义的两种机制。正是由于这两种机制的存在,才赋予了Java强大的 面向对象能力。abstract class和interface之间在对于抽象类定义的支持...

    c++中纯虚函数和抽象类1

    1.虚函数的定义语法是 virtual 返回值类型 函数名称() = 0 2.抽象类的定义在一个类中,只要有一个纯虚函数,那么这个类就叫抽象类 3.抽象类特点

    Java中抽象类和接口的区别

    在Java语言中,abstract class和interface 是支持抽象类定义的两种机制。正是由于这两种机制的存在,才赋予了Java强大的面向对象能力。abstract class和interface之间在对于抽象类定义的支持方面具有很大的相似性,...

    Java 接口和抽象类

    Java 接口和抽象类

    11.java接口和抽象类的区别.zip

    11.java接口和抽象类的区别.zip11.java接口和抽象类的区别.zip11.java接口和抽象类的区别.zip11.java接口和抽象类的区别.zip11.java接口和抽象类的区别.zip11.java接口和抽象类的区别.zip11.java接口和抽象类的区别....

    C#类、接口、虚方法和抽象方法-抽象类和接口的相同点和区别

    (3) 抽象类可以但不是必须有抽象属性和抽象方法,但是一旦有了抽象方法,就一定要把这个类声明为抽象类 (4) 具体派生类必须覆盖基类的抽象方法 (5) 抽象派生类可以覆盖基类的抽象方法,也可以不覆盖。如果不覆盖,...

    10.java接口和抽象类的相似性.zip

    10.java接口和抽象类的相似性.zip10.java接口和抽象类的相似性.zip10.java接口和抽象类的相似性.zip10.java接口和抽象类的相似性.zip10.java接口和抽象类的相似性.zip10.java接口和抽象类的相似性.zip10.java接口和...

    Java抽象类与接口实验报告

    Java抽象类与接口实验报告

    详解C++纯虚函数与抽象类

    主要介绍了C++纯虚函数与抽象类的相关资料,帮助大家更好的理解和学习c++,感兴趣的朋友可以了解下

    Java中抽象类和接口的区别与作用详解

    结论:abstract class和Interface是JAVA语言中的两种定义抽象类的方式。Interface将abstract的概念作了更进一步的发挥。你可以想像Interface是“纯粹”的 abstract class,只可以包含抽象方法,也包括一些常量的定义...

    Java继承_抽象类与接口的应用.

    1.继承及继承实例 2.方法重写(Overwrite) 3.super关键字 4.方法重载(Overload) 5.final修饰符 6.abstract修饰符 7.抽象类 8.接口 9.接口和抽象类对比 10.接口和抽象类使用场合实例 11.总结

    java中接口与抽象类的详细分析与比较

    该资源对接口与抽象类作了详细分析与比较,相信你看了之后,会彻底的明白了,java学习更上一层楼

    java 抽象类与接口的练习

    java 抽象类与接口的练习,包括代码及注释,个人笔记

    实验3 抽象类和接口(2学时)

    掌握Java中抽象类和抽象方法的定义; 掌握Java中接口的定义,熟练掌握接口的定义形式以及接口的实现方法。 二、实验内容 1、按照要求使用Java进行编码。 编写一个抽象类Shape,其中有抽象方法getArea()和...

Global site tag (gtag.js) - Google Analytics