Java里面子级与父级的作用_java – 将父级转换为其子级

我有:

class A

{

public String getID() { return "id of A";}

}

class B extends A

{

public String getID() { return "id of B"; }

}

class C {

public A returnA() {

return new A();

}

}

现在我需要做的事情:

C c = new C();

B b = (B)c.returnA();

String id = b.getId();

但我无法访问C.returnA()的实现,我无法将其返回类型更改为B.

解决方法:

您正在将父母投射到孩子身上.

你永远不能那样做,因为新的A()绝对不是B.

考虑一下:String extends Object.现在尝试cast(String)new Object().根本没有任何意义.

因为你的对象无论如何都不是B,所以它不可能有B的行为.

下面是一个Decorator实现的示例:

public class B extends A {

private A decorated;

public B(A decorated) {

this.decorated = decorated;

}

@Override

public String getID() {

return "id of B";

}

@Override

public void otherMethodOfA() {

return decorated.otherMethodOfA();

}

}

请注意,必须覆盖A的所有方法,以确保在装饰元素上调用方法. (这里是otherMethodOfA的一个例子)

使用这样:

C c = new C();

B b = new B(c.returnA());

String id = b.getID();

标签:java,oop

来源: https://codeday.me/bug/20190713/1454080.html

可以使用递归函数来实现查询 Java子级父级菜单。下面是一个示例代码: ``` public class MenuItem { private int id; private String name; private MenuItem parent; // 省略getter和setter方法 public MenuItem(int id, String name, MenuItem parent) { this.id = id; this.name = name; this.parent = parent; } } public class Menu { public static MenuItem findParent(MenuItem menuItem) { if (menuItem.getParent() == null) { // 如果没有父级,则返回当前菜单项 return menuItem; } else { // 递归查询父级菜单项 return findParent(menuItem.getParent()); } } public static void main(String[] args) { MenuItem menuItem1 = new MenuItem(1, "菜单项1", null); MenuItem menuItem2 = new MenuItem(2, "菜单项2", menuItem1); MenuItem menuItem3 = new MenuItem(3, "菜单项3", menuItem2); MenuItem parent = findParent(menuItem3); System.out.println("子级菜单项 " + menuItem3.getName() + " 的父级菜单项是:" + parent.getName()); } } ``` 在这个例子中,`MenuItem` 类表示菜单项,其中包含菜单项的 ID、名称和父级菜单项。`Menu` 类包含了一个 `findParent` 方法,用于递归查询子级菜单项的父级菜单项。在 `main` 方法中,创建了三个菜单项,并将第一个菜单项作为整个菜单的根节点。然后,通过调用 `findParent` 方法来查询菜单项 3 的父级菜单项,最终输出结果为:`子级菜单项 菜单项3 的父级菜单项是:菜单项1`。 需要注意的是,如果菜单项的层非常深,或者菜单项的层非常多,那么使用递归查询可能会导致栈溢出。因此,应该在实现递归函数时考虑到这些问题,并进行必要的优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值