Question:
- I am unable to execute classes that extend other classes. I believe it is due to how I am declaring the classpath. I am executing the below via terminal. Any guidance would be awesome. Thanks!
- Arachnid --> Parent
- Spider --> Subclass of Arachnid
- GardenSpider --> Subclass of Spider
All code is executed from parent directory (I can see bin and src).
.
├── bin
│ ├── Arachnid.class
│ ├── GardenSpider.class
│ └── Spider.class
└── src
├── Arachnid.java
├── GardenSpider.java
└── Spider.java
Classes:
1. Arachnid
// Chapter 6 : 6
/*
This is a superclass
*/
public class Arachnid {
/*
* Constructor
*/
public Arachnid () {
System.out.printf("%s%n%n", "Executing Arachnid constructor");
}
public static void main(String[] args) {
Arachnid a = new Arachnid(); // create Arachnid object
}
}
2. Spider
// Chapter 6 : 6
/*
* This is a subclass - inherits all protected and public members from parent (field, methods, and nested classed)
*/
public class Spider extends Arachnid{
/*
* Constructor
*/
public Spider () {
System.out.printf("%s%n%n", "Executing Spider constructor");
}
public static void main(String[] args) {
Spider a = new Spider(); // create spider object
}
}
3. Garden Spider
// Chapter 6 : 6
/*
This is a subclass
*/
public class GardenSpider extends Spider{
/*
* Constructor
*/
public GardenSpider () {
System.out.printf("%s%n%n", "Executing GardenSpider constructor");
}
public static void main(String[] args) {
GardenSpider gs = new GardenSpider(); // create garden spider object
}
}
Compile Classes
- javac -d bin src/*.java
Executing Arachnid constructor
src/Spider.java:7: error: cannot find symbol
public class Spider extends Arachnid{
^
symbol: class Arachnid
1 error
error: compilation failed
3. java -cp bin/Arachnid.class:bin/Spider.class:bin/GardenSpider.class src/GardenSpider.java
src/GardenSpider.java:6: error: cannot find symbol
public class GardenSpider extends Spider{
^
symbol: class Spider
1 error
error: compilation failed
References:
Notes:
bin/*
shorthand option to leverage when declaring classpaths- Class separator :
- FQN should be used for passing classpath
- You don't need .java when executing (if you do it right?)
- /Users/hw_2/src/*.classes
- /Usershw_2/src/*.java
- java -cp /Users/hw/hw_2/bin/Arachnid.class src/Arachnid.java