如何使用C++从派生类调用父函数?例如,我有一个名为的类parent,以及一个child从父派生的类.每个班级都有一个print功能.在孩子的打印功能的定义中,我想调用父母的打印功能.我该怎么做呢?
我想在Java中打印对象的"对象引用"以进行调试.即根据情况确保对象是相同的(或不同的).
问题是有问题的类继承自另一个类,它覆盖了toString()和hashCode(),它们通常会给我id.
示例情况:运行多线程应用程序,其中我(在开发期间)想要检查所有线程是否使用相同的资源对象实例.
我只是想了解为什么在接口定义的所有域都默认static和final.保持字段的想法static对我来说是有道理的,因为你不能拥有接口的对象,但为什么它们final(隐含地)?
任何人知道为什么Java的设计者在接口使得场去static和final?
可能类似于问题,为什么外部Java类可以访问内部类私有成员?或使用子类中的super关键字访问超类私有字段.
但是存在一些差异:子类可以访问其父级(并且只有最近的父级)的私有成员.
鉴于以下示例代码:
public class T {
private int t;
class T1 {
private int t1;
public void test() {
System.out.println(t);
}
}
class T2 extends T1 {
private int t2;
public void test() {
System.out.println(t);
System.out.println(super.t1);
System.out.println(this.t2);
}
}
class T3 extends T2 {
public void test() {
System.out.println(t);
System.out.println(super.t1); // NG: t1 Compile error! Why?
System.out.println(super.t2); // OK: t2 OK
}
}
}
Run Code Online (Sandbox Code Playgroud) 这是工作的java代码
class Cup {
public String sayColor() {
return "i have a color .";
}
}
class TCup extends Cup{
public String sayColor(){
System.out.println(super.getClass().getName());
return super.sayColor()+"color is tee green.";
}
}
class MyTCup extends TCup {
public String sayColor(){
System.out.println(super.getClass().getName());
return super.sayColor()+"but brushed to red now!";
}
}
class Test {
public static void main(String[] args) {
Cup c = new MyTCup();
System.out.print(c.sayColor());
}
}
Run Code Online (Sandbox Code Playgroud)
并运行Test类打印
MyTCup
MyTCup
i have a color .color is tee green.but brushed to red now! …Run Code Online (Sandbox Code Playgroud) 假设我有三个A,B和C类.
都有public void foo()定义的方法.
现在从C的foo()方法我想调用A的foo()方法(不是它的父B的方法,而是超级超类A的方法).
我试过super.super.foo();,但这是无效的语法.我怎样才能做到这一点?
我有一个类,它扩展了我需要覆盖的类,但我需要调用该类的父类.因为我不能打电话给super因为那将执行直接父母什么是获得我父类的父母的最佳方式?
我确信这是一个基本问题,但是我已经做了一段时间了.
class A
{
public void myMethod()
{ /* ... */ }
}
class B extends A
{
public void myMethod()
{ /* Another code */ }
}
class C extends B
{
I need to call Class A here
{ /* Another code */ }
}
Run Code Online (Sandbox Code Playgroud) 假设我有3个类A,B并且C每个类都扩展了前一个类.
如何调用代码A.myMethod()从C.myMethod()如果B也实现myMethod?
class A
{
public void myMethod()
{
// some stuff for A
}
}
class B extends A
{
public void myMethod()
{
// some stuff for B
//and than calling A stuff
super.myMethod();
}
}
class C extends B
{
public void myMethod()
{
// some stuff for C
// i don't need stuff from b, but i need call …Run Code Online (Sandbox Code Playgroud) 我使用一个库,其中一个抽象类覆盖了一个从Object抽象方法继承的具体方法:
public abstract class A {
@Override
public abstract boolean equals(Object obj);
}
Run Code Online (Sandbox Code Playgroud)
要扩展此类,我必须实现该equals方法:
public class B extends A {
@Override
public boolean equals(Object obj) {
return obj != null && obj.getClass() == B.class;
}
}
Run Code Online (Sandbox Code Playgroud)
为什么抽象方法(A::equals)会覆盖具体方法(Object::equals)?我没有看到这个目标.
我有3个类,他们互相继承如下:
A
?
B
?
C
Run Code Online (Sandbox Code Playgroud)
在每个类中,我有以下方法:
protected void foo() {
...
}
Run Code Online (Sandbox Code Playgroud)
课内C我想打电话foo从类A没有调用foo在B:
protected void foo() {
// This doesn't work, I get the following compile time error:
// Constructor call must be the first statement in a constructor
super().super().foo();
}
Run Code Online (Sandbox Code Playgroud)
编辑
一些上下文信息:
B类是我们使用的实际类.C类是一个单元测试类,它有一些修改.foo里面的方法B做了一些我们不想要的东西,所以我们在里面覆盖它C.但是foo在课堂A上很有用,需要调用.
java ×9
overriding ×4
inheritance ×3
object ×2
c++ ×1
final ×1
hashcode ×1
interface ×1
oop ×1
static ×1
super ×1
visibility ×1