方法的覆写

/*方法的覆写*/
class Person14{
public void prin(){
System.out.println("父类中的方法");
}
}
class Student3 extends Person14{
public void prin(){
System.out.println("子类中的方法");
}
}
public class OverrideDemo {


public static void main(String[] args) {
// TODO Auto-generated method stub
new Student3().prin();
}


}
### C++ 中非虚方法的行为和规则 在 C++ 的面向对象编程中,如果一个基类的方法未声明为 `virtual`,那么它就是一个非虚方法。对于非虚方法而言,“”的含义与虚函数有所不同。具体来说,当派生类定义了一个同名、参数列表完全一致的非虚方法时,并不构成真正的“动态绑定”,而是形成了隐藏(hiding)的效果[^1]。 #### 方法隐藏 vs 动态绑定 - 对于非虚方法,即使派生类提供了相同的签名实现,通过基类指针或引用调用此方法时,仍然会执行基类版本而非派生类版本。 - 若希望达到类似虚函数的功能,则需显式地将该方法声明为 `virtual`,从而启用运行时多态性支持。 #### 示例代码说明 以下是展示非虚方法隐藏现象的一个简单实例: ```cpp #include <iostream> using namespace std; class Base { public: void show() { cout << "Base::show()" << endl; } }; class Derived : public Base { public: void show() { cout << "Derived::show()" << endl; } }; void callShow(Base& obj){ obj.show(); // 尽管 Derived 重载了 show(), 此处依然调用的是 Base 版本 } int main(){ Derived d; Base* bPtr = &d; bPtr->show(); // 输出 'Base::show()' 因为此处并未涉及动态绑定 d.show(); // 直接作用域解析符调用则可以得到预期结果'Derived::show()' callShow(d); // 同样因为传入的是基础类型引用所以也是'Base::show()' return 0; } ``` 在此案例里可以看出,虽然 `Derived` 类确实重新实现了来自 `Base` 的 `show()` 函数,但由于后者并非虚拟函数,在经由基类接口访问的情况下并不会触发相应的派生类行为。 --- ### 注意事项及相关特性讨论 尽管可以通过某些技巧绕过这一限制(如利用强制转换),但这通常被认为是不良实践并且容易引起维护困难等问题。因此建议开发者始终优先采用良好的设计原则构建清晰易懂的应用架构。 另外值得注意的一点是关于构造函数以及析构函数方面的特别规定:即便它们可能看起来像是常规成员函数一样具有相似的名字模式,实际上却永远不可能成为可被继承或者盖的对象;尤其是前者总是特定于各自所属类别之下独一无二的存在形式而已[^2]。 --- ####
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值