前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >java--第6章 继承与多态

java--第6章 继承与多态

作者头像
北山啦
发布2022-11-27 11:37:01
3510
发布2022-11-27 11:37:01
举报
文章被收录于专栏:北山啦的博客

实验目的:

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();

   }

}

运行结果截图:

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-01-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 实验目的:
  • 实验内容:
    • 1.编写一个Java程序,定义Person类以及该类的一个子类Student,满足以下UML类图的描述,并编写测试类TestMain,使用Student对象以继承的方式使用父类Person类的成员。
      • 2. 请编码实现动物世界的继承关系:
        • 3.编码实现交通工具的类继承。
          • 4. 请编码实现如下需求:
            • 5.编写一个Dongwu类,它有Dog、Bird两个子类,这两个子类都重写了父类Dongwu的move和cry方法,请在main方法中进行测试,测试时要求使用向上转型。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档