子类使用父类的方法 调用谁的子类继承父类构造函数数

本帖子已过去太久远了,不再提供回复功能。C/C++(35)
JAVA(69)
* 不同于C++,JAVA中子类总是重写父类函数。C++中子类只重写父类的虚函数。
* 不同于C++,JAVA中指向子类对象的父型引用,依然优先调用子类对象的函数。C++相反。
* 不同于C++,JAVA中子类的构造函数自动调用父类的构造函数,若父类的构造函数中调用了方法,依然是子类优先。C++相反
class father{
print(&who are you?&);
void print(String str){
System.out.println(&FATHER: &+str);
class son extends father{
void print(String str){
System.out.println(&SON: &+str);
public class Gouzaoextends {
* @param args
public static void main(String[] args) {
// TODO Auto-generated method stub
father obj = new son();
obj.print(&str&);
/**C++
1)基类的指针指向派生类对象:那么该指针只能够调用基类所定义的函数原型,
如果该函数为虚函数,则调用该派生类自己的成员函数。
如果不是虚函数,则调用基类的函数。
2)如果以派生类的指针指向基类对象,则必须事先做明显的转型操作,但是这种做法很危险。
对于const类对象/指针/引用,只能调用类的const成员函数,因此,const修饰成员函数的最重要作用就是限制对于const对象的使用。
a. const成员函数不被允许修改它所在对象的任何一个数据成员。
b. const成员函数能够访问对象的const成员,而其他成员函数不可以。
c. const成员函数也不能调用类中任何非const成员函数。
#include &iostream&
virtual void func(int data){
cout&&&A1:&&&data&&
//下面的函数,子类中未覆盖---const对象调用
virtual void func(int data)const{
cout&&&A2:&&&data&&
//func(&A3&);//也不能调用类中任何非const成员函数。
void func(char* str){
cout&&&A3 &&&str&&
virtual void func2(int data)const{
cout&&&A4:&&&data&&
class B:public A{
B():A(){//A()中会调用A的方法,即使该方法是虚函数,B中也覆盖了。---不同于JAVA
void func(){
cout&&&B1: &&&&&&&
//覆盖了基类的虚函数
void func(int data){
cout&&&B2:&&&data&&
void func(char* str){
cout&&&B3 &&&str&&
//覆盖了基类的虚函数
void func2(int data)const{
cout&&&B4:&&&data&&
int main(){
B//默认调用基类构造函数,基类构造函数还是调用了基类的函数!!--JAVA相反。
cout&&&B b&&&
b.func(&bstr&);
const A *pcA;//const,很特殊
pA = &b; //子类对象交给基类指针
pA-&func(1);//子类方法-覆盖基类虚函数
cout&&&pA-&func(1);&&&
pA-&func(&test&);//优先调用基类的非virtual方法
cout&&&pA-&func('test');&&&
A().func(1);
pcA-&func(2);//A2: 2
pcA-&func2(3);//B4: 3
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:84061次
积分:1465
积分:1465
排名:千里之外
原创:55篇
转载:54篇
(1)(1)(3)(16)(60)(8)(4)(9)(4)(2)(1)(1)在主函数中是怎么实现子类调用父类的构造函数
函数中Bar2 bar2 = new Bar2();oos.writeObject(bar2);除了序列bar2对象外,还有上面作用?为什么控制台上会bar
bar1 bar2等输出
谢谢,完美解决了我的疑问
写下你的评论...
写下你的评论...
Copyright (C)
All Rights Reserved | 京ICP备 号-21019人阅读
C++基础知识(39)
来源:/fwxh101/blog/item/bb9efcf603a68b.html
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:426534次
积分:4044
积分:4044
排名:第7814名
原创:67篇
转载:60篇
评论:33条
(1)(4)(5)(7)(10)(4)(7)(1)(33)(15)(11)(1)(4)(1)(10)(7)(7)Java中子类调用父类构造方法的问题分析
字体:[ ] 类型:转载 时间:
本篇文章介绍了,Java中子类调用父类构造方法的问题分析。需要的朋友参考下
在Java中,子类的构造过程中,必须调用其父类的构造函数,是因为有继承关系存在时,子类要把父类的内容继承下来,通过什么手段做到的?&&&
答案如下:&&&
&当你new一个子类对象的时候,必须首先要new一个父类的对像出来,这个父类对象位于子类对象的内部,所以说,子类对象比父类对象大,子类对象里面包含了一个父类的对象,这是内存中真实的情况.构造方法是new一个对象的时候,必须要调的方法,这是规定,要new父类对象出来,那么肯定要调用其构造方法,所以:&&&
&第一个规则:子类的构造过程中,必须调用其父类的构造方法。一个类,如果我们不写构造方法,那么编译器会帮我们加上一个默认的构造方法,所谓默认的构造方法,就是没有参数的构造方法,但是如果你自己写了构造方法,那么编译器就不会给你添加了,所以有时候当你new一个子类对象的时候,肯定调用了子类的构造方法,但是在子类构造方法中我们并没有显示的调用基类的构造方法,就是没写,如:super(); 并没有这样写,但是这样就会调用父类没有参数的构造方法,如果父类中没有没有参数的构造方法就会出错。&&&
&第二个规则:如果子类的构造方法中没有显示的调用基类构造方法,则系统默认调用基类无参数的构造方法注意:如果子类的构造方法中既没有显示的调用基类构造方法,而基类中又没有默认无参的构造方法,则编译出错,所以,通常我们需要显示的:super(参数列表),来调用父类有参数的构造函数。 代码如下://当你没有使用父类默认的构造方法时,此时在子类的构造方法中就需要显示的调用父类定义的构造方法。&class Animal{&& private S&& //如果你定义一个新的构造方法&& public Animal(String name) {&&&& this.name =&& }&}&public Dog extends Animal{&& //这时你就要显示的调用父类的构造方法,因为子类默认调用的是父类的&& //无参构造方法Animal()&& public Dog(){&&&& super("小狗");& //显示调用父类的有参构造方法&&&& ....& //子类的构造方法处理&& }&}&//当然,如果你在父类里面把无参的构造方法,显示的写出来了,比如:&class Animal{&& private S&& //无参的构造方法&& public Animal() {&&&& .....& //处理&& }&& /*&& 如果你定义一个新的构造方法,那么在子类的构造方法中,就可以不用显示的调用父类的构造方法,因为子类有个无参的构造方法,&& 子类在构造方法中会自动调用父类已经定义的无参构造方法。&& */&& public Animal(String name) {&&&& this.name =&& }&}总结:不过一般的,在父类中使用了构造方法的重载,在子类中就可以根据需要,调用相应的父类构造方法。
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具}

我要回帖

更多关于 子类继承父类构造函数 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信