java--第6章 继承与多态

实验目的:

1.理解类的继承,掌握变量隐藏、方法覆盖的概念。

2.理解多态概念,掌握方法的匹配调用原则。

3.理解访问控制符的使用。

实验内容:

      1.编程实现类的继承机制。

        2.编程实现方法的多态性。

实验步骤:

1.编写一个Java程序,定义Person类以及该类的一个子类Student,满足以下UML类图的描述,并编写测试类TestMain,使用Student对象以继承的方式使用父类Person类的成员。

Person

- name:String

+ Person();

+ Person(name:String)

+getName():String

+void setName(name:String)

Student

- department:String

+ Student();

+ Student(department:String)

+ getDepartment():String

+ void setDepartment(department:String)

 

说明:UML(统一建模语言,是 Unified Modeling Language的缩写)类图用来抽象地描述各个类的信息及各个类之间的关系。在UML类图中,每一个矩形代表一个类。类图分三层,第一层显示类的名称,如果是抽象类,则就用斜体显示。第二层是类的属性。第三层是类的方法。前面的符号,+ 表示public,- 表示private,# 表示protected。图中的箭头表示继承关系,由子类指向父类。

源代码:

Person类:

Students类

TestMain类

运行结果截图:

 

2. 请编码实现动物世界的继承关系:

(1)动物(Animal) 具有行为:吃(eat)、 睡觉(sleep)。

(2)动物包括:兔子(Rabbit), 老虎(Tiger)。

(3)这些动物吃的行为各不相同(兔子吃草,老虎吃肉);但睡觉的行为是一致的。

请通过继承实现以上需求,并编写测试类AnimalTest进行测试。

源代码:

package 第六章;

 

class Animal{

   String name;

  

   public String getName() {

      return name;

   }

 

   public void setName(String name) {

      this.name = name;

   }

 

   public void eat(){

      System.out.println(this.name+"在吃");

   }

   public void sleep(){

      System.out.println(this.name+"在睡觉");

   }

}

 

 

 

class Rabbit extends Animal{

   public void eat(){

      System.out.println(this.getName() + "在吃草");

   }

  

}

 

class Tiger extends Animal{

   public void eat(){

      System.out.println(this.getName() + "在吃肉");

   }

  

}

 

public class AnimalTest {

   public static void main(String[] args){

      Rabbit r = new Rabbit();

      r.setName("小白兔");

      r.eat();

      r.sleep();

      Tiger t = new Tiger();

      t.setName("老虎");

      t.eat();

      t.sleep();

   }

 

}

运行结果截图:

3.编码实现交通工具的类继承。

父类Vehicles属性:名称,颜色,座位。方法:showDetail( ),用来显示名称,颜色,座位。

子类Car增加String型属性act用来表示小汽车的独特行为(如:“不能拉货用”等),增加方法show( )用来输出小汽车的独特行为。

Car类调用父类Vehicles的方法showDetail( )显示名称、颜色、座位,调用自己的方法show( )输出独特行为。编写测试类VehiclesTest来测试。

源代码:

package 第六章;

 

class Vehicles{

   String color;

   String name;

   String seat;

  

   public String getColor() {

      return color;

   }

 

   public void setColor(String color) {

      this.color = color;

   }

 

   public String getName() {

      return name;

   }

 

   public void setName(String name) {

      this.name = name;

   }

 

   public String getSeat() {

      return seat;

   }

 

   public void setSeat(String seat) {

      this.seat = seat;

   }

 

   public void showDetail(){

      System.out.println("名称:"+this.name+"\t    颜色:"+this.color+"\t座位:"+this.seat);

   }

}

 

class Car extends Vehicles{

   String act = "不能拉货用";

   public void show(){

      System.out.println("独特属性:"+this.act);

   }

 

}

 

public class VehiclesTest {

   public static void main(String[] args){

      Car c = new Car();

      c.setName("小汽车");

      c.setColor("白色");

      c.setSeat("四座");

      c.showDetail();

      c.show();

   }

 

}

 

运行结果截图:

4. 请编码实现如下需求:

(1)乐器(Instrument) 分为:钢琴(Piano)、 小提琴(Violin)。

(2)各种乐器的弹奏( play )方法各不相同。

编写一个测试类InstrumentTest,要求:

(1)编写方法testPlay, 对各种乐器进行弹奏测试。要依据乐器的不同,进行相应的弹奏。

(2)在main方法中进行测试。

提示:

(1)乐器Instrument为父类,钢琴(Piano)、 小提琴(Violin)为子类;

(2)乐器类只有play()方法,钢琴(Piano)子类和小提琴(Violin)子类有同名方法play()即重写父类乐器的play()方法。

源代码:

package 第六章;

 

 

class Instrument{

   String name;

 

   public String getName() {

      return name;

   }

 

   public void setName(String name) {

      this.name = name;

   }

   public void play(){

      System.out.println("弹奏方法");

   }

}

 

class Piano extends Instrument{

   public void play(){

      System.out.println(""+this.name);

   }

}

 

class Violin extends Instrument{

   public void play(){

      System.out.println(""+this.name);

   }

}

 

 

public class TestPlay {

   public static void main(String[] args){

      Piano p = new Piano();

      p.name = "钢琴";

      p.play();

      Violin v = new Violin();

      v.name = "小提琴";

      v.play();

   }

 

}

 

运行结果截图:

5.编写一个Dongwu类,它有Dog、Bird两个子类,这两个子类都重写了父类Dongwu的move和cry方法,请在main方法中进行测试,测试时要求使用向上转型。

提示:使用打印语句完成方法的内容。如Bird的move方法输出“我有翅膀,我能飞翔! ”

源代码:

package 第六章;

 

 

 

 

class Dongwu{

   String name;

  

   public String getName() {

      return name;

   }

   public void setName(String name) {

      this.name = name;

   }

   public void move(){

      System.out.println("移动方式");

   }

   public void cry(){

      System.out.println("尖叫方法");

   }

}

 

class Dog extends Dongwu{

   public void move(){

      System.out.println("我有双腿,我能奔跑");

   }

   public void cry(){

      System.out.println("狗吠");

   }

}

 

 

 

class Bird extends Dongwu{

   public void move(){

      System.out.println("我有翅膀,我能飞翔");

   }

   public void cry(){

      System.out.println("歌唱");

   }

}

 

 

public class main {

   public static void main(String[] args){

      Dog d = new Dog();

      d.setName("");

      d.move();

      d.cry();

      Bird b = new Bird();

      b.setName("");

      b.move();

      b.cry();

   }

}

 

运行结果截图:

 

猜你喜欢

转载自blog.csdn.net/qq_45176548/article/details/112262937
今日推荐