动物
public abstract class Animal {
String name;
public Animal(String name) {
this.name = name;
}
}
Run Code Online (Sandbox Code Playgroud)
狮子
public class Lion extends Animal {
public Lion(String name) {
super(name);
// TODO Auto-generated constructor stub
}
public void roar() {
System.out.println("Roar");
}
}
Run Code Online (Sandbox Code Playgroud)
鹿
public class Deer extends Animal {
public Deer(String name) {
super(name);
}
public void runAway() {
System.out.println("Running...");
}
}
Run Code Online (Sandbox Code Playgroud)
TestAnimals
public class TestAnimals {
public static void main(String[] args) {
Animal lion = new Lion("Geo");
Animal deer1 …Run Code Online (Sandbox Code Playgroud) 场景.我正在写与游戏相关的代码.在那个游戏中Player(它也是一个类)有一个列表Item.还有其他类型的项继承Item,例如ContainerItem,DurableItem或WeaponItem.
显然,对我来说这是非常方便的List<Item>.但是当我获得玩家物品时,我唯一的方法是通过使用instanceof关键字来区分什么类型的物品.我敢肯定,我已经读过,依赖它是不好的做法.
在这种情况下可以使用它吗?或者我应该重新考虑我的所有结构?
我想根据对象的类型执行几个操作,而不使用instanceof.起初我正在考虑基于类型重载方法(如下所示),并认为Java可能会适当地选择方法(基于最具体的对象类).
import java.util.ArrayList;
import java.util.List;
public class TestA {
public static void main(String[] args)
{
List<Object> list = new ArrayList();
list.add(new A());
list.add(new B());
list.add(new C());
list.add(new Object());
TestA tester = new TestA();
for(Object o: list)
{
tester.print(o);
}
}
private void print(A o)
{
System.out.println("A");
}
private void print(B o)
{
System.out.println("B");
}
private void print(C o)
{
System.out.println("C");
}
private void print(Object o)
{
System.out.println("Object");
}
}
class A {
}
class B extends A { …Run Code Online (Sandbox Code Playgroud) 我有一个称为会话的抽象类。讲座和教程扩展了会议。然后,我有一个称为注册的类,其中包含一个会话列表(讲座和教程)。如何在“注册”中的会话列表中循环,并仅从会话列表中返回讲座列表?
我的下一个问题是我应该存储2个列表。一个讲座列表和一个教程列表,而不是一个会话列表?这是因为会话列表对我来说毫无用处,我每次都必须遍历列表以获取有关讲座和教程的信息。有什么办法让我缺少所有讲座的对象吗?我是Java新手。
public class Enrolment {
private List<Session> sessions;
public Enrolment() {
this.sessions = new ArrayList<>();
}
public addSession(Session session) {
this.sessions.add(session);
}
}
Run Code Online (Sandbox Code Playgroud)
public class Session {
private int time;
public Session(int time) {
this.time = time;
}
}
Run Code Online (Sandbox Code Playgroud)
public class Lecture extends Session {
private String lecturer;
public Lecture(int time, String lecturer) {
super(time);
this.lecturer = lecturer;
}
}
Run Code Online (Sandbox Code Playgroud)
public class Tutorial extends Session {
private String tutor;
private int tutorScore;
public Tutorial(int time, String tutor, int tutorScore) …Run Code Online (Sandbox Code Playgroud) 我有以下场景:
public class A {
}
public class B extends A {
}
public class C extends B {
public void Foo();
}
Run Code Online (Sandbox Code Playgroud)
我有一个方法可以返回类A,B或C,我想安全地转换为C,但只有在类类型为C时.这是因为我需要调用Foo()但我不想要ClassCastException.
我正在查看一些大量使用Java instanceof运算符的代码.我会反对细节的诱惑,因为这是一个普遍的问题. instanceof让我想起c ++的动态演员,以及我很久以前读过的关于它的建议,如果你认为你需要它,可能你的模型已经关闭了.这仍然是传统智慧吗?它适用于Java instanceof吗?
假设我有一个叫做超类animal,和三个子类分别叫Dog,Cat以及Lion扩展了animal类。然后,我为每个子类创建一个对象并将它们添加到ArrayList<animal>.
当我浏览该列表时,如何区分is 中的每个对象都属于类型的对象Dog或Cat对象?ArrayListanimal
java ×7
casting ×2
oop ×2
architecture ×1
arraylist ×1
class ×1
downcast ×1
hierarchy ×1
inheritance ×1
instanceof ×1
iteration ×1
list ×1
loops ×1
polymorphism ×1
refactoring ×1