Trouble assigning sub class to super class array

Hi,
I would greatly appreciate some help with the following:
I want to assign a sub class to a super class array but the following code does not work
where the board is comprised of the super class
     private static void makeMove( int X, int Y, int moveX, int moveY )
          ChessPiece tempChessPiece = ( ChessPiece ) board[ X ] [ Y ];
          board[ X ] [ Y ].setType( UNDEFINED );
          board[ moveX ] [  moveY  ] = tempChessPiece;
     }

I have got this code to work but it does not appear
to be very efficient to me as i dont recycle the
objects.
Any thoughts?The objects will be recycled by the garbage collector. It's very efficient so there's very little performance penalty in creating objects and releasing objects.
Still, another alternative is to represent an empty square with null. In that case the code becomes,
private static void makeMove( int selectedX, int selectedY, int moveToX, int moveToY ) {
   board[moveToY][moveToX] = board[selectedX][selectedY]; // piece to new position
   board[selectedX][selectedY] = null; // remove from old
}I don't know your exact design but that should work. It's kind of natural too. If a square is empty there's no piece object there at all. No new object has to be created and that explicit cast is gone.

Similar Messages

  • Even i call this() paramerterised constuctor in my class, Is super class su

    Even i call this() paramerterised constuctor in my class, Is super class super() parameter less constuctor invokes?
    I have excuted the following program. And result will be as follows:
    Grandparent() constructor
    Parent 25 constructor
    Parent() constructor
    Child() constructor
    The program is below:
    class ConstructorChain {
    public static void main(String[] args) {
    Child c = new Child();
    class Child extends Parent {
    Child() {
    System.out.println("Child() constructor");
    class Parent extends Grandparent {
    Parent() {
    this(25);
    System.out.println("Parent() constructor");
    Parent(int x) {
    System.out.println("Parent(" + x + ") constructor");
    class Grandparent {
    Grandparent() {
    System.out.println("Grandparent() constructor");
    for this my excepected answer is
    Parent 25 constructor
    Parent() constructor
    Child() constructor
    because in parent class i defined this() constructor so, as my undersatnd is it never call Grand Parent Constructor as it is default parameterless constructor.
    please Advise me
    Aruna

    You can't initialize a class without it's super classes constructor being run. So even if you call another constructor (of the same class), the parent classes constructor will still be called.

  • Accessing Super Class of Super Class

    Consider the following classes
    Class A {
    print() {
    System.out.println("Class A Called");
    Class B extends A {
    print() {
    System.out.println("Class B Called");
    Class C extends B {
    print() {
    System.out.println("Class C Called");
    How can I call the print method of class A while working in class C ? Please state all possible solutions.
    Can it somehow be done using super ?

    RZP wrote:
    Consider the following classes
    Class A {
    print() {
    System.out.println("Class A Called");
    Class B extends A {
    print() {
    System.out.println("Class B Called");
    Class C extends B {
    print() {
    System.out.println("Class C Called");
    How can I call the print method of class A while working in class C ? Please state all possible solutions.
    Can it somehow be done using super ?Here is one possible solution.
    I really don't understand the ramifications of reflection... and am not familiar with OOP design... but reflection seems to enable a programmer to avoid OOP design principals as well as type-checking. While I like reflection, most of my readings suggest to rarely use it.
    public class Main {
      public static void main(String[] args) {
        try {
          new C(789).print();
        } catch(Exception e) { e.printStackTrace();  }
          static class A {
            protected A a;
            protected int id;
            public A(A a, Integer id) {
              this.a = a;
              this.id = id;
            public A(int id) { this.id = id; }
            public void print() {
              System.out.println("Class A called... from a " + a.getClass().getCanonicalName() + " using the original instance with id = " + a.id);
        static class B extends A {
          public B(A a, Integer id) { super(a, id);  }
          public B(int id) { super(id); }
          public void print() { System.out.println("Class B called...");   }
        static class C extends B {
            public C(A a, Integer id) { super(a, id); }
            public C(int id) { super(id); }
            public void print() {
                try {
                    System.out.println("Class C called...");
                    Object obj = getClass().getSuperclass().getSuperclass().getConstructor(A.class, Integer.class).newInstance(this, -111);
                    obj.getClass().getMethod("print", null).invoke(obj, null);
                } catch (Exception e) {
                    e.printStackTrace();
    }Anyway, I think that enables one to invoke overridden methods in super classes, regardless of how "high-up" they are in the class heirarchy (without having to use a new object to do it). Use that idea in an interview at your own risk but just not in interviews for the same position I am trying to get...
    Edited by: dpxqb on Apr 17, 2010 4:43 AM

  • How to access super class's super class

    Hello every one.
    I have a question.
    if I have a class like:
    public class A {
    void methoda() {
    void methodb() {
    and a class B extends A and override A's methoda
    public class B extends A {
    void methoda() {
    and a class C extends B which want use A's methoda.
    public class C extends B {
    // and here I want to use class A 's methoda,how can I do?
    thanks a lot

    Try the following. When run it eill print out:
    [In class C] A:B:C
    Now calling A's method: [In class A] A and i is 500Which is what you want right?
    public class TestSuperSuper {
        public static void main (String[] args) throws Exception {
            C c = new C();
            c.setName("A", "B", "C");
            c.setI(500);
            c.methodA();
        static class A {
            String aName;
            int i;
            public void methodA(){
                System.out.println("[In class A] " + aName + " and i is " + i);
            public void setName(String aName){
                this.aName = aName;
            public void setI(int i){
                this.i = i;
        static class B extends A {
            String bName;
            public void methodA(){
                System.out.println("[In class B] " + aName + ":" + bName);
            public void setName(String aName, String bName){
                this.aName = aName;
                this.bName = bName;
        static class C extends B {
            String cName;
            A wrappedA;
            public C(){
                wrappedA = new A();
            public void methodA(){
                reflectOnA();
                System.out.println("[In class C] " + aName + ":" + bName + ":" + cName);
                System.out.print("Now calling A's method: ");
                wrappedA.methodA();
            public void setName(String aName, String bName, String cName){
                this.aName = aName;
                this.bName = bName;
                this.cName = cName;
            private void reflectOnA(){
                try {
                Field[] aFields = wrappedA.getClass().getDeclaredFields();
                for (int i = 0; i < aFields.length; i++){
                    Class fldType = aFields.getType();
    if (fldType.isPrimitive()){
    if (fldType.getName().equals("int")){
    aFields[i].setInt(wrappedA, aFields[i].getInt(this));
    else {
    // now do the other primitive type tests here
    else {
    aFields[i].set(wrappedA, aFields[i].get(this));
    catch (Exception e){
    System.err.println(e);
    The main thing here is that in class C you have an instance variable called wrappedA which is an instance of A and the method called reflectOnA(). Basically, what this method does is it will set all the fields in wrappedA to the same values that this object has so that it would look like that wrappedA is somewhat the same as this object. You will call this method whenever you want to call your superclass' superclass' method.
    Hope this helps.

  • Is there any way to access an overridden method of super class?

    class Animals
         void makeNoice(){System.out.println("General noice");}
    class Dog extends Animals
              void makeNoice(){System.out.println("bark");}
    };Is there any way to access the makeNoice() of Animals class from a Dog object
    Dog dog = new Dog();
    Animal animaldog = dog;
    animaldog.makeNoice(); // will always calls Dog's makeNoice() ie the overriden method.
    Is there a way to access the Animals makeNoice() method ? by using cast or super etc?
    Or it is not possible at all?

    Rajeebs wrote:
    Now another question coming in my mind.
    Whether any way to access a method which belong to super class's super class without using any method of class B,
    like super.super.fn() ??Isn't this just the same question again? And won't you again just "solve" it by writing some invokeSuperSuperMethod or other? This flawed design is quickly getting out of hand, isn't it? The question isn't "How can I invoke an arbitrarily deep superclass' method?" but more "Why do I need to invoke a method belonging to a concrete type at all?". If you need to do that, chances are you've misused inheritance.
    To use your initial sample code, in what circumstance would you require that a Dog make anything other than a Dog noise? It makes no sense. Point is, you have an Animal abstraction, and can call makeNoise on any instance of any subclass, and it will make the appropriate noise. By trying to use trickery to force other noises, you're doing something unnatural, and you're also depending on actual specific concrete subclasses. If you're going to go to specific classes and ask them to make their noise, what use is the inheritance? What use it the polymorphism?
    Are we heading into another "I've got a brilliant idea for a [useless language feature|http://forums.sun.com/thread.jspa?threadID=5423706&messageID=10905772#10905772], guys!" thread?

  • Instantiation of similar object over a super class deciding the sub class

    Hello all
    First, sorry if I'm duplicating an already answered question. I didn't searched very deep.
    Initial position:
    I have 2 Object (A1 and A2) which share the most (about 90%) of their instance variables an the associated methods. The values of the instance variables are retrieved in the real implementation from a stream. Depending of the data of the stream, I have to instantiate either a A1 or A2 object.
    A test implementation (using an int in case of the stream):
    The super class A:
    package aaa;
    public class A
      protected int version = -1;
      protected String name = null;
      protected AE ae = null;
      protected A()
      protected A(int v)
        // Pseudo code
        if (v > 7)
          return;
        if (v % 2 == 1)
          this.version = 1;
        else
          this.version = 2;
      public final int getVersion()
        return this.version;
      public final String getName()
        return this.name;
      public final AE getAE()
        return this.ae;
    }The first sub class A1:
    package aaa;
    public final class A1 extends A
      protected A1(int v)
        this.version = v;
        this.name = "A" + v;
        this.ae = new AE(v);
    }The second subclass A2:
    package aaa;
    import java.util.Date;
    public final class A2 extends A
      private long time = -1;
      protected A2(int v)
        this.version = v;
        this.name = "A" + v;
        this.time = new Date().getTime();
        this.ae = new AE(v);
      public final long getTime()
        return this.time;
    }Another class AE:
    package aaa;
    public class AE
      protected int type = -1;
      protected AE(int v)
        // Pseudo code
        if (v % 2 == 1)
          this.type = 0;
        else
          this.type = 3;
      public final int getType()
        return this.type;
    }To get a specific object, I use this class:
    package aaa;
    public final class AFactory
      public AFactory()
      public final Object createA(int p)
        A a = new A(p);
        int v = a.getVersion();
        switch (v)
        case 1:
          return new A1(v);
        case 2:
          return new A2(v);
        default:
          return null;
    }And at least, a class using this objects:
    import aaa.*;
    public final class R
      public static void main(String[] args)
        AFactory f = new AFactory();
        Object o = null;
        for (int i = 0; i < 10; i++)
          System.out.println("===== Current Number is " + i + " =====");
          o = f.createA(i);
          if (o instanceof aaa.A)
            A a = (A) o;
            System.out.println("Class   : " + a.getClass().getName());
            System.out.println("Version : " + a.getVersion());
            System.out.println("Name    : " + a.getName());
            System.out.println("AE-Type : " + a.getAE().getType());
          if (o instanceof aaa.A2)
            A2 a = (A2) o;
            System.out.println("Time    : " + a.getTime());
          System.out.println();
    Questions:
    What would be a better way to encapsulate the logic into their respective objects ? Is there a way to let the super class A itself identify the type of the object and then extend from A to either A1 or A2 ?
    Thanks in advance
    Andreas

    Hello jduprez
    First, I would thank you very much for taking the time reviewing my problem.
    Just for the record: have you considered regular serialization? If you control the software at both ends of the stream, you could rely on standard serialization mechanism to marshall the objects and unmarshall them automatically.In my case, I can't control the other site of the stream. At the end, the data comes from a FileInputStream and there aren't objects on the other site, only pur binary data.
    - It seems you have one such factory class. Then you already have encapsulated the "determine class" logic, you don't need to add such logic in superclass A.I thought from an OO view, that the super class A is responsible of doing that, but that's where the problem starts. So at the end, it's better doing it in the factory class.
    - A itself encapsulates the logic to load its own values from the stream.
    - A1 and A2 can encapsulate the logic to load their own specific value from a stream (after the superclass' code has loaded the superclass' attributes values).
    My advise would be along the lines of:
    public class A {
    .... // member variables
    public void load(InputStream is) {
    ... // assign values to A's member variables
    // from what is read from the stream.
    public class A1 extends A {
    ... // A1-specific member variables
    public void load(InputStream is) {
    super.load(is);
    // now read A1-specific values
    public class AFactory {
    public A createA(InputStream is) {
    A instance;
    switch (is.readFirstByte()) {
    case A1_ID:
    a = new A1();
    break;
    case A2_ID:
    a = new A2();
    break;
    a.load(is);
    }The example above assumes you have control over the layout of the data in the stream (here for a given A instance, the attributes defined in A are read first, then come the subclass-specific attributes.
    The outcome is: you don't have to create a new A( ) to later create another instance, of a subclass.I like the idea. In the AFactory, is the "A instance;" read as "A a;" ?
    Is there a way to let the super class A itself identify the type of the object and then extend from A to either A1 or A2 ?Note I initially read this question as "can an instance of a class mutate into another class", to which the answer is no (an object has one single, immutable class; it is an instance of this class, and of any superclass and superinterface, but won't change its class at runtime).Yes, I have been thinking about a way for mutating into a subclass to keep the already initialized values from the A class without copying or parsing again. But preventing an instance of an A class will be my way. So, in this aspect, Java didn't changed in the last 10 years... It's a long time ago I've used Java for some real projects.
    You can, however, create an instance of another class, that copies the values off a priori A instance. Your example code was one way, another way could be to have a "copy constructor":
    public class A {
    public A(A model) {
    this.att1 = model.att1;
    this.att2 = model.att2;
    public class A1 {
    public A1(A model) {
    super(model);
    ... // do whatever A1-specific business
    )Still, I prefer my former solution less disturbing: I find the temporary A instance redundant and awkward.Nice to know. I prefer the first solution too.
    Thank you again for the help and advices. My mind is searching sometimes for strange solutions, where the real is so close ;-)
    Andreas

  • Accessing a Sub class variable in a Super Class

    Hi ,
    Is there any easiest way to access a Subclass Variable in a Super Class.
    Class Super1{
    Class sub extends Super1
    private String substring1;
    In my application the 'substring1' values is not null .But all fields in Super1 class are null .
    How can i access the value of the Subclass Variable in Super class .
    Thanks

    This would be a way to make the superclass dependent on subclass behavior. Of course this only makes sense if getSubString() is likely to have multiple different implementations in different subclasses.
    public abstract class Super {
      public String getString() {
       return "SuperString" + getSubString();
      protected abstract String getSubString();
    public class Sub extends Super {
      private String substring;
      protected String getSubString() {
       return substring;
    }Using this just to access a variable whose contents differ from subclass to subclass is overkill. If you want each subclass to provide a different substring, create a constructor with a substring parameter in the superclass instead:public class Super {
      private String substring;
      protected Super(String substring) {
       this.substring = substring;
      public String getString() {
       return "SuperString" + substring;
    public class Sub extends Super {
      public Sub() {
       super("substring");
    }

  • Is it possible to OVERLOAD a super-class method in a sub-class?

    Hi all,
    I have a query that
    Is it possible to OVERLOAD a super-class method in a sub-class?
    If it is possible, please give me an example.
    Thanks,
    Hari

    Hi,
    Is the method int Display(int a){} overloading
    the super-class's void Display() method? If
    possible, please clarify this and how it would be
    method overloading?
    hanks,
    Hari
    Hi Hari,
    Yes, it is possible. Look at this piece of code:
    class Senior
         void Display()
              System.out.println("Super class method");
    class Junior extends Senior
         int Display(int a)
              System.out.println("Subclass method: "+a);
              return(a+10);
         }> }
    class example
         public static void main(String args[])
              Junior j = new Junior();
              j.Display();
    System.out.println("Subclass method
    od "+j.Display(5));
    Is this what you were asking? Hope this helped.Hi,
    I guess you guys are confused here...
    Overloading is achieved by methods in the same class...
    Overriding is across a superclass subclass methds.

  • Question on Assigning Sub Class References

    Hi Friends,
    I have small doubt regarding Assigning Class Reference to Super Class or Interface.
    List list= new ArrayList(); or Collection collection = new ArrayList();
    Map map=new HashMap();
    if i assing like above i may loose some of the specilized methods of ArrayList,Map etc...
    but most of the people are creating the objects in above fashion.
    can any body list out the advantages.
    Thanks in Advance!

    Agreed, you do lose some of the specialised methods.
    But sometimes its functionality you don't need.
    If your function takes a "Collection" it doesn't matter if its ArrayList or Set - you're just interested in the Collection Interface (common use case would be to obtain an Iterator to the underlying datastructure)
    Writing to the interface means that you can change the implementation at will.
    You can swap an ArrayList for a LinkedList. A HashMap for an LinkedHashMap or TreeMap. And the rest of your code is untouched, because it presumed nothing about the implementation.

  • Can we chagne Super class method parameters in Sub class

    Hi,
    I created a super class.  In that class i created a method. That method is having 4 input parameters and 4 export parameters.
    I created a sub class for that super class. I need to use only 2 input parameters in this class rather than 4 parameters. I want to delete 2 Input parameters in the sub class of the super class method.  Is it possible.
    If possible. can we give an simple code or pseudo code?
    regards,
    krishna

    Hi,
    I think you can not.
    Because, only public attributes can be inherited and they will remain public in the subclass.
    for further detail check,
    http://help.sap.com/saphelp_nw70/helpdata/en/1d/df5f57127111d3b9390000e8353423/content.htm
    regards,
    Anirban

  • Can we change the Super class attribute scope in Sub class

    Hi.
    I created a super class. In that i have 4 attributes. That attributes are PUBLIC.
    I created a sub class. In that i got all super class attributes. I want to change that attributes as a Private. Is it possible.
    If it is possible.Give me an Example with code or Pseudo code.
    Regards.
    Krishna.

    Hi Krishna,
    It is not possible... If you declare the Attributes again in Subclass of the same name as that of Super class
    then the way of accessing them would be different from that of attributes in the main class.
    Hope this would help you
    Good luck
    Narin

  • Sub class   calls super in constructor

    when a sub calss calls super() in its constructor is it overriding the constructor of base class ?
    Class A {
    A(Strin neme){
    class B extend A{
    B(){
    super("test")
    Systemout......
    I donot know the term explaning this feature is it called overriding constructor?

    miro_connect wrote:
    so how to describe this code, are there any terms to explain this methodology to not technical guys ?Yeh. "Magic". Seriously. There's little point explaining such things to non-technical people. Ever tried to teach your mum how to program a VCR?
    By definition, non-tech people will simply not understand what you're on about, and won't need to.

  • How to inherit super class constructor in the sub class

    I have a class A and class B
    Class B extends Class A {
    // if i use super i can access the super classs variables and methods
    // But how to inherit super class constructor
    }

    You cannot inherit constructors. You need to define all the ones you need in the subclass. You can then call the corresponding superclass constructor. e.g
    public B() {
        super();
    public B(String name) {
        super(name);
    }

  • Can defualt inherited the Super Class constructor to sub class ?

    Hi,
    is it passible to inherit the super class constructor by defualt when extends the super class.
    Thanks
    MerlinRoshina

    Constructor rules:
    1) Every class has at least one ctor.
    1.1) If you do not define an explicit constructor for your class, the compiler provides a implicit constructor that takes no args and simply calls super().
    1.2) If you do define one or more explicit constructors, regardless of whether they take args, then the compiler no longer provides the implicit no-arg ctor. In this case, you must explicitly define a public MyClass() {...} if you want one.
    1.3) Constructors are not inherited.
    2) The first statement in the body of any ctor is either a call to a superclass ctor super(...) or a call to another ctor of this class this(...) 2.1) If you do not explicitly put a call to super(...) or this(...) as the first statement in a ctor that you define, then the compiler implicitly inserts a call to super's no-arg ctor super() as the first call. The implicitly called ctor is always super's no-arg ctor, regardless of whether the currently running ctor takes args.
    2.2) There is always exactly one call to either super(...) or this(...) in each constructor, and it is always the first call. You can't put in more than one, and if you put one in, the compiler's implicitly provided one is removed.

  • Super class array

    I have two classes
    - class A and class B
    - class B extends class A
    In class A I have class level variables declared as
    public static int d_jake = 0;
    public static String array_test[] = new String[50];
    I had done some operations on them and changed their values I mean d_jake has some other value and array_test is filled with few strings...
    Now I want to use them in class B.... but when I directly used them I am able to see that d_jake and array_test are in their initial values
    they are not updated....
    how can I get updated values into class B... from class A

    Provide an SSCCE.

Maybe you are looking for

  • How add new table in derby  travel database

    sir i use Sun Java Studio Creator with derby sir i want create new table in derby travel database but when i right click on table not that disable and not give and table create button please give me idea how i add new table in derby travel database t

  • Reg SAP Email

    Hi All, I have a requirement like I am doing BDC program after BDC run I need to send report output to spool as well as to the user through SAP Email can any body throw some idea how to do on this please? Thanks&Regards Mahesh

  • How to access iPAQ address book (Contacts)?

    Hi, Does anyone know how to add an entry to the Contacts on iPAQ using Java? Is there any tool to do that? Thanks -J.

  • Safari Alert?!

    Hi all, a few days ago when I was using my imac,there seems to be an alert that pops up for a second or two then disappears.  It's been happening every time I use my computer for the past few times.  I'm not sure if it has to do with my system or in

  • Video and sound not working

    I have found several issues with Itunes on various computers where when playing trailers in Itunes, there is NO video and NO sound. All of the affected machines are on Windows 7 Professional mostly 64 bit. Some Dell Desktops and some Lenovo laptops.