AP Computer Science A : Object-Oriented Program Design

Study concepts, example questions & explanations for AP Computer Science A

varsity tutors app store varsity tutors android store

Example Questions

Example Question #5 : Object Oriented Program Design

Which of the following header statements allow you to omit using the std:: when using cout?

Possible Answers:

using namespace std;

You don't need a header statement.

#include <standard>

#include <iostream>

#include  <cmath>

Correct answer:

using namespace std;

Explanation:

You must put using namespace std; at the top of your file to avoid having to type std:: every time you use cout and cin.

Example Question #1 : Class Libraries

Which of the access modifiers don't work in Java?

Possible Answers:

static

final

delete

abstract

Correct answer:

delete

Explanation:

One of the benefits to Java is that there is garbage collection. So when data is disposed of its done automatically versus a language like C++ where you need to tell the program to delete dynamically allocated data.

Example Question #11 : Object Oriented Program Design

What line of code is needed to import in order to use Color in the following format Color.Blue, Color.RED, Color.White?

Possible Answers:

import java.util.Color;

 

import java.awt.Color;

import java.io.Color;

import java.awt.*;

Correct answer:

import java.awt.*;

Explanation:

If you were to use the following format Color.Red, Color.Blue, etc then the correct answer would have to be java.awt.*; While java.awt.Color; does fit the appropriate code, if you import that entire statement, you don't need to put Color.Red just Red and following. The other two import statements are just completely wrong.

Example Question #1 : Class Inheritance

For this question, consider the following code:

private static class Philosopher {

        private String name;

        private String favoriteSubject;

        public Philosopher(String n, String f) {

                name = n;

                favoriteSubject = f;

        }       

        public String getName() {

                return name;

        }       

        public String getFavoriteSubject() {

                return favoriteSubject;

        }       

        public void speak() {

                System.out.println("Hello, World!  My name is "+name + ".  My favorite subject is "+favoriteSubject);

        }

}

private static class Nominalist extends Philosopher {

        boolean franciscan;   

        public Nominalist(String n,boolean frank) {

                super(n,"logic");

                franciscan = frank;

        }       

        public void speak() {

                super.speak();

                if(franciscan) {

                        System.out.println("I am a Franciscan");

                } else {

                        System.out.println("I am not a Franciscan");

                }

        }       

        public String whoMightHaveTaughtMe() {

                if(franciscan) {

                        return "Perhaps William of Ockham?....";

                } else {

                        return "Perhaps it was Durandus of St. Pourçain — scandalous, a Dominican nominalist!";

                }

        }

public static void main(String[] args) {

        Philosopher p = new Nominalist("Nicanor",false);

        System.out.println(p.whoMightHaveTaughtMe());

}

What is the output for this main method?

Possible Answers:

Perhaps it was Durandus of St. Pourçain — scandalous, a Dominican nominalist!

This will not compile.  You cannot call a subclass function within the scope of the main method.

Perhaps William of Ockham?....

This will not compile.  That method is defined on the subclass, but the variable is defined as the superclass Philosopher, meaning that the method is not visible.

There is no output. 

Correct answer:

This will not compile.  That method is defined on the subclass, but the variable is defined as the superclass Philosopher, meaning that the method is not visible.

Explanation:

When you assign a subclass (like Nominalist) to a super class (like Philosopher) you will not be able to call any of the subclass-specific methods on the variable in question.  This code does just that, which will prevent the code from compiling.

Example Question #2 : Class Inheritance

Consider the following code:

private static class Philosopher {

        private String name;

        private String favoriteSubject;     

        public Philosopher(String n, String f) {

                name = n;

                favoriteSubject = f;

        }       

        public String getName() {

                return name;

        }       

        public String getFavoriteSubject() {

                return favoriteSubject;

        }      

        public void speak() {

                System.out.println("Hello, World!  My name is "+name + ".  My favorite subject is "+favoriteSubject);

        }

}

private static class Nominalist extends Philosopher {

        boolean franciscan;     

        public Nominalist(String n,boolean frank) {

                super(n,"logic");

                franciscan = frank;

        }      

        public void speak() {

                super.speak();

                if(franciscan) {

                        System.out.println("I am a Franciscan");

                } else {

                        System.out.println("I am not a Franciscan");

                }

        }   

        public String whoMightHaveTaughtMe() {

                if(franciscan) {

                        return "Perhaps William of Ockham?....";

                } else {

                        return "Perhaps it was Durandus of St. Pourçain — scandalous, a Dominican nominalist!";

                }

        }

public static void main(String[] args) {

     Philosopher[] phils = {

               new Philosopher("Petrus","Ethics"),

               new Nominalist("Minimus Maximus",false),

               new Nominalist("Theodoric",true)};

     for(int i = 0; i < phils.length; i++) {

          phils[i].speak();

     }

}

What is the output for the code above?

Possible Answers:

Hello, World!  My name is Petrus.  My favorite subject is Ethics

Hello, World!  My name is Minimus Maximus.  My favorite subject is logic

Hello, World!  My name is Theodoric.  My favorite subject is logic

Hello, World!  My name is Minimus Maximus.  My favorite subject is logic. I am not a Franciscan

Hello, World!  My name is Petrus.  My favorite subject is Ethics

Hello, World!  My name is Theodoric.  My favorite subject is logic. I am a Franciscan

Hello, World!  My name is Petrus. My favorite subject is Ethics

Hello, World!  My name is Minimus Maximus. My favorite subject is logic

I am not a Franciscan

Hello, World!  My name is Theodoric.  My favorite subject is logic

I am a Franciscan

Hello, World!  My name is Petrus.  My favorite subject is Ethics

Hello, World!  My name is Minimus Maximus.  My favorite subject is logic I am not a Franciscan

Hello, World!  My name is Theodoric.  My favorite subject is logic I am a Franciscan

Hello, World!  My name is Petrus.  My favorite subject is Ethics

Hello, World!  My name is Minimus Maximus.  My favorite subject is logic

Hello, World!  My name is Theodoric.  My favorite subject is logic

Correct answer:

Hello, World!  My name is Petrus. My favorite subject is Ethics

Hello, World!  My name is Minimus Maximus. My favorite subject is logic

I am not a Franciscan

Hello, World!  My name is Theodoric.  My favorite subject is logic

I am a Franciscan

Explanation:

Three things must be kept in mind for this question.  First (and foremost), given the way that inheritance works, you know that for each object, you will get an output that matches the given object's particular type—even though the array is an array of the superclass type (namely Philosopher).  Second, you must notice that the lines "I am a Franciscan" and "I am not a Franciscan" come a line after the data before it (which is printed by using the super call). Finally, be careful about punctuation! There are periods missing in some of the output lines.

Example Question #1 : Class Inheritance

Consider the following code:

public class Rectangle {

     private double width, height;

     public Rectangle(double w,double h) {

          width = w;

          height = h;

     }

    

     public double getArea() {

          return width * height;

     }

    

     public double getPerimeter() {

          return 2 * width + 2 * height;

     }

}

 

public class Square {

     private double side;

     public Square(double s) {

          side = s;

     }

     public double getArea() {

          return side * side;

     }

     public double getPerimeter() {

          return 4 * side;

     }

}

Which of the following represents a redefinition of Square that utilizes the benefits of inheritance?

Possible Answers:

public class Square extends Rectangle {

     public Square(double s) {

          super(s,s);

     }

}

public class Square extends Rectangle {

     public Square(double s) {

         new Rectangle(s,s);

     }

}

public class Square implements Rectangle {

     public Square(double s) {

          super(s,s);

     }

}

public class Square extends Rectangle {

     private double side;

     public Square(double s) {

          super(s,s);

     }

}

public class Square {

     private Rectangle r;

     public Square(double s) {

          r = new Rectangle(s,s);

     }

     public double getArea() {

          return r.getArea();

     }

     public double getPerimeter() {

          return r.getPerimeter();

     }

}

Correct answer:

public class Square extends Rectangle {

     public Square(double s) {

          super(s,s);

     }

}

Explanation:

We know that a square really is just a subclass of a rectangle, for it is merely a rectangle having four sides that are all equal. Using inheritance, you can very easily reuse much of your Rectangle code. First, you need to extend the Rectangle class:

public class Square extends Rectangle { . . .

Next, you can be rid of the field side. This allows you to alter the constructor for Square to call the Rectangle constructor. You do this using super (because Rectangle is the superclass).

After this, you can delete the getArea and getPerimeter methods, for they will be handled by the superclass. This gives you a very simple bit of code!

Example Question #11 : Class Design

Which of the following is TRUE about the Object class?

Possible Answers:

Object is the only class that never has any descendants.

None of these answers are true.

Object inherits a minimum of four classes.

Object has one superclass, Entity.

Every class has all of Object's methods.

Correct answer:

Every class has all of Object's methods.

Explanation:

Object is the most basic class which all others, even user made ones, inherit. Therefore, all classes have Object's methods. A way to think of classes is to think of a tree: the Object class is the lowest node on the tree, where all other nodes can connect back to.

Example Question #295 : Computer Science

class Z

{

public:

void Func4();

};

class Y : public Z

{

public:

       virtual void Func3();

};

class B : public Y

public:

       virtual void Func1();

       void Func2();

};

class C : public B

public:

       virtual void Func1();

};

 

What is the base class in the above code.

Possible Answers:

None of them

Class Y

Class C

Class B

Class Z

Correct answer:

Class Z

Explanation:

The base class is a class that doesn't derivate from any other class. Starting from the bottom of the code, we see that class C is inherited from class B, which is inherited from class Y, which is finally inherited by class Z. Class Z is the base class.

Example Question #1 : Class Inheritance

class Pet {
public:
    Pet() {}
    virtual void bar() {cout << "In pet bar(); }
};


class Cat : public Pet {
public:

    virtual void eat() {cout << "Cat eating"; }

    virtual void bar() {cout << "In Cat bar()"; }

};

Given the above classes, what would the result of:

int main(){

    Cat felix;

    Pet peeve;

    peeve = felix;

    peeve.bar();

}

Possible Answers:

None of the above

Runtime error

The program runs and prints: In Cat bar() 

The program runs and prints: In Pet Bar()

Compilation Error

Correct answer:

The program runs and prints: In Pet Bar()

Explanation:

The Cat class is inherited from the Pet class and an instance of each object is created in main. 

peeve = felix;

When felix is assigned to peeve, it loses it's atributes as a Cat and now becomes a Pet. When the bar method is called, it will call bar inside the Pet class and not the Cat class. 

If the line of code was:

felix = peeve;

Then, the program will crash. This crashes because we are trying to assign a Pet (which is the parent), to a Cat (which is a child class). Assigning a parent to a child will cause a Slicing Problem because the parent is "bigger" than the child. If you try to put something big (a Pet)  into a small container (a Cat), it will not work.

Example Question #2 : Class Inheritance

class Member{

public: 

    Member() { cout<< 1 ; }

};

 

class Base{

public:

    Base(){ cout<< 1; }

    Memeber member;

};

 

class Derived : public Base{

public:

    Derived(){ cout << 3; }

};

int main(){

  Derived der;

}

Given the code above, what is the output of the program?

Possible Answers:

213

312

123

132

321

Correct answer:

123

Explanation:

When an object is created the order of which everything is created is as follows:

1. Member variables are created first.

2. The constructor of the parent class called (if the object has a parent)

3. The object's own constructor is called.

 

Following the code, we can see that a Derived object is created in main. Since the Derived class has a parent, the call order jumps to the Base class. Now we are inside the Base class, nothing has been outputted yet. Inside the Base class, the local variables are created first. This brings us to the Member class.

In the Member class, the constructor is called and 1 is outputted.

After this, we jump back to the constructor of the Base class and 2 is outputted.

Finally, we get back to where we started, the Derived class. The constructor of derived is called and 3 is outputted. The final output is 123.

Learning Tools by Varsity Tutors