下面有幾個具有針對性的題型來更好理解繼承的概念:
1、分析下列程序的運行結果,然後編譯、執行。
class Pet{
protected String name;
public Pet(String n){
name = n;
}
public String getName(){
return name;
}
public String move(){
return "run";
}
public String speak(){
return "";
}
public String toString(){
return "My pet " + name;
}
}
class Dog extends Pet{
protected int weight;
public Dog(String s){
super(s);
}
}
class PetTest{
public static void main(String[] args){
Pet myPet = new Pet("George");
Dog myDog = new Dog("Spot");
System.out.println(myPet.toString() + "\n" + "Speak: " +
myPet.speak() +"\n" + myPet.move() + " " +
myPet.getName() + "\n");
System.out.println(myDog.toString() + "\n" + "Speak: " +
myDog.speak() +"\n" + myDog.move() + " " +myDog.getName() + "\n");
}
}
- 修改Dog類的構造函數,使之可以初始化Dog類中的weight值。
public Dog(String s){
super(s);
}
改成:
public Dog(String s,int weight){
super(s);
this.weight=weight;
}
- 在Dog類中添加方法getWeight以獲得其weight值。
public int getWeight() {
return weight;
}
public void setWeight(int weight) {
this.weight = weight;
}
- 修改類PetTest中的main方法,使用新的構造函數創建一個名爲“snoopy”,重爲10的Dog類的對象,並利用其方法輸出包括重量在內的各項值
修改後:
Dog snoopy = new Dog("Spot",10);
- 要使Dog類對象的speak()方法返回值爲“Woof Woof”,應如何做?
2、按照要求完成程序: - 第一個類是圖形類(Shape),含有一個成員變量color(字符串類型),一個沒有參數的構造方法,以及一個有一個字符串類型參數的構造方法來初始化顏色變量,還有一個返回顏色變量值的成員方法show,以及一個抽象方法getArea獲取面積,返回值爲double類型;
public abstract class Shape {
String color;
//沒有參數的構造方法
public Shape(){
}
//構造方法來初始化顏色變量
public Shape(String color){
this.color=color;
}
//返回的成員方法
public String show(){
return color;
}
//抽象方法getArea獲取面積
public abstract double getArea();
}
- 第二個類是圓形類(Circle)繼承自圖形類,含有一個成員變量半徑r,有一個有兩個參數的構造方法,來初始化顏色和半徑,一個方法getArea,返回值爲double,獲取圓的面積值。
public class Circle extends Shape{
//成員變量半徑r
double r;
//構造方法初始化顏色和半徑
public Circle(String color,double r) {
super(color);
this.r=r;
}
//獲取圓的面積值
@Override
public double getArea() {
double area;
area=r*r*3.14;
return area;
}
}
- 第三個類是矩形類(Rectangle)繼承自圖形,含有兩個double類型的成員變量長a和寬b,有一個有三個參數的構造方法,來初始化顏色、長和寬,一個方法getArea,返回值爲double,獲取矩形的面積值。
public class Rectangle extends Shape{
//成員變量長a和寬b
double a,b;
//三個參數的構造方法
public Rectangle(String color,double a,double b){
super(color);
this.a=a;
this.b=b;
}
//獲取矩形的面積值
@Override
public double getArea() {
double area;
area=a*b;
return area;
}
- 第四個類是測試類(TestShape),分別定義圓形類和矩形類的實例對象,並用show方法,getArea方法來測試自己的定義
public class TestShape {
public static void main(String[] args) {
//分別定義圓形類和矩形類的實例對象
Shape circle=new Circle("紅色",10);
Shape rectangle=new Rectangle("藍色",8,5);
System.out.println(circle.show());
System.out.println(circle.getArea());
System.out.println(rectangle.show());
System.out.println(rectangle.getArea());
}
}
`測試結果: