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

   }

}

运行结果截图:

1.定义一个人的类(属性有名字,年龄,性别。写一个能输出各个属性值的方法showInfo()),定义一个学生类(属性有学号),学生继承人类,要求: (1)父类的属性赋值用构造方法来实现(分别用有参数构造方法和无参数构造方法实现); (2)子类的属性也用构造方法来赋值; (3)在子类中重写父类的showInfo()方法 (4)声明学生类的对象,调用学生的显示信息的方法。 2、请编码实现动物世界的继承关系: 动物(Animal)具有行为:吃(eat)、睡觉(sleep)、移动(move) 动物包括:兔子(Rabbit),老虎(Tiger),鹰(eagle) 这些动物吃、移动的行为各不相同(eat,move动作不同);但睡觉的行为是一致的。 3、(1)设计一个表示二维平面上点的类Point,包含有表示坐标位置的protected类型的,成员变量x和y,获取和设置x和y值的public方法。 (2)设计一个表示二维平面上圆的类Circle,它继承自类Point,还包含有表示圆半径的protected类型的成员变量r、获取和设置r值的public方法、计算圆面积的public方法。 (3)设计一个表示圆柱体的类Cylinder,它继承自类Circle,还包含有表示圆柱体高的protected类型的成员变量h、获取和设置h值的public方法、计算圆柱体体积的public方法。 (4)建立Cylinder对象,输出其轴心位置坐标、半径、面积、高及其体积的值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

北山啦

这个功能还没人试过呢

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值