C++和java的多态性比较

36 篇文章 0 订阅

C++子类类型的指针赋值给父类类型的指针。如father* fason = new son(3);

Java子类类型的引用赋值给父类类型。如father fason = new son();


共同点:

不能访问子类新增的成员。


区别:

C++必须在父类方法中加上virtual,否则即使子类重写了父类的方法,fason->print()依然调用的是父类的方法。

Java与C++不同,只要子类重写了父类的方法,fason.print()调用的就是子类的方法。


//C++多态实现的必要条件:virtual+重写
#include "iostream"
using namespace std;
class father{
public:
	int f;
	father(){
		f = 0;
	}
	//java则不需要virtual
	//virtual void print(){
	void print(){
		//必须有virtual,father* fason = new son(3);fason->print();才会调用子类的,
		//但若此时子类没有定义(重写)print(),则还是访问父类的,而且输出的也是父类的f值
		
		cout<<"f = "<<f<<endl;
	}
};

class son:public father{
public:
	int f;
	son(int x):father(){
		f = x;
	}
	void print(){//为了实现多态性,不止父类需要virtual,这里也必须重写方法
		cout<<f<<endl;
	}
	void prt(){
		cout<<"hello"<<endl;
	}
};

int main(){
	father* fason = new son(3);
	fason->print();
	//fason->prt();
	return 0;
}

/**
 * 子类只需重写父类的成员即可。
 */
package t;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Collections;

class father{
	public int f = 0;
	public void print(){
		System.out.println("f = "+f);
	}
	
}
class son extends father{
	public int f = 3;//f覆盖
	public void print(){//覆盖
		System.out.println(f);
	}
}

class sont extends father{
	
	public void print(){
		System.out.println(f);//f继承,方法覆盖
	}
}

public class Test{       
  
	public static void main(String[] args) throws Exception {       	 	
    	
    	father fason = new son();
    	fason.print();//输出儿子的数据
    	
    	father fa = new father();
    	fa.print();
    	
    	father fasont = new sont();
    	fasont.print();
    	
        
    }   
}  

 


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: C和Java有很多不同之处,C是一种底层编程语言,它更加关注程序的性能和效率,而Java是一种高级编程语言,它更注重程序的安全性和可移植性。此外,C语言使用指针来实现动态内存分配,而Java不使用指针,而是使用垃圾回收机制来管理内存。 ### 回答2: C是一种面向过程的编程语言,而Java是一种面向对象的编程语言。C语言主要用于系统级编程,例如操作系统和嵌入式系统的开发。它的语法简洁、执行效率高,但对于程序员而言,使用C编程需要自己管理内存,包括分配和释放等操作。 相比之下,Java更注重于开发大型应用程序和跨平台应用。使用Java编程时,程序员可以利用面向对象的特性,例如封装、继承和多态,更方便地组织代码和实现复杂的系统。而且,Java的内存管理由垃圾回收机制自动处理,减轻了程序员的负担。 另外,C语言的代码可移植性较差,同一份代码需要根据不同的操作系统和硬件平台进行修改。而Java通过Java虚拟机(JVM)实现了跨平台性,一次编译后的Java代码可以在不同的系统上运行。这降低了开发者的开发和维护成本。 虽然Java拥有许多方便的特性,但它的执行效率通常较C语言慢一些。因此,在需要高性能的应用场景,如游戏开发或者操作系统内核开发时,C语言仍然是更好的选择。 总而言之,C和Java都是常用的编程语言,有各自的适用场景。C适用于系统级编程和对效率要求较高的场景,而Java适用于大型应用程序和跨平台开发。 ### 回答3: C语言和Java语言是两种不同的编程语言,在很多方面存在着区别。 首先,C语言是一种过程式编程语言,而Java是一种面向对象编程语言。C语言注重于程序的过程和函数的设计,而Java更注重于对象的封装、继承和多态性Java具有更丰富的面向对象特性,使得代码更易于维护和扩展。 其次,C语言是编译型语言,而Java是解释型语言。C语言的源代码需要通过编译器转换为机器语言后才能执行,而Java通过JVM(Java Virtual Machine)解释执行字节码。这使得Java具有更好的跨平台性,可以在不同的操作系统上运行,而C语言需要为不同的操作系统编写特定的代码。 另外,C和Java在内存管理方面也有差异。C语言程序员需要手动管理内存分配和释放,容易出现内存泄漏和悬挂指针等问题,而Java具有垃圾回收机制,可以自动回收不再使用的对象,减少内存问题。 在语言的应用领域上,C语言更适合系统级编程和嵌入式开发,如操作系统和驱动程序等;而Java更适合于开发大型应用程序和网络应用,如企业级应用和Web应用等。 总之,虽然C和Java在语法和一些基本概念上有相似之处,但它们的设计理念和应用领域不同。选择何种语言应根据具体的需求和目标来决定。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值