Java作业练习_第六周作业多态性(小白学习记录,仅供参考,有错指出)

第一题

写出下列程序的运行结果:

package com.cxl.ch5.demo5;
public class Base {
    int m=0;
    public int getM(){
        return m;
    }
}
package com.cxl.ch5.demo5;

public class Sub extends Base{
    int m=1;
    public int getM(){
        return m;
    }
}
package com.cxl.ch5.demo5;
public class MyTest {
    public static void main(String[] args) {
        Sub sub=new Sub();
        System.out.println(sub.m);
        System.out.println(sub.getM());

    }
}

运行结果:

1
1

第二题

仔细阅读下列程序,写出程序的运行结果。

public class Man {
    void drink(){
        System.out.println("drink water");
    }
}
class OldMan extends Man{
    void drink(){
        System.out.println("drink tea");
    }
}
class YoungMan extends Man{
    void drink(){
        System.out.println("drink beer");
    }
    void dance(){
        System.out.println("can dance");
    }
}
public class ManTest {
    public static void main(String[] args) {
        Man tom=new Man();
        Man jack=new YoungMan();
        Man mary=new OldMan();
        tom.drink();
        jack.drink();
        mary.drink();
        if(jack instanceof YoungMan){
            ((YoungMan)jack).dance();
        }
    }
}

运行结果:

drink water
drink beer
drink tea
can dance

第三题

写出下列程序的输出结果。

package com.cxl.ch5.demo3;
public abstract class LivingThings {
    public abstract String feature();
}
package com.cxl.ch5.demo3;

public class Animal extends LivingThings {
    String mouth;
    public Animal() {
    }
    public Animal(String mouth) {
        this.mouth = mouth;
    }
    @Override
    public String feature() {
        return mouth;
    }
}
package com.cxl.ch5.demo3;
public class Plant extends LivingThings {
    String leaf;
    public Plant() {
    }
    public Plant(String leaf) {
        this.leaf = leaf;
    }
    @Override
    public String feature() {
        return leaf;
    }
}
package com.cxl.ch5.demo3;
public class Example {
    public static void main(String[] args) {
        Animal animal=new Animal("嘴巴");
        System.out.println(animal.feature());
        Plant plant=new Plant("叶子");
        System.out.println(plant.feature());
    }
}

运行结果:

嘴巴
竹子

第四题

编程体,设计一个动物声音“模拟器”,希望模拟器可以模拟许多动物的叫声,要求如下。
1)编写抽象类Animal
Animal抽象类有2个抽象方法cry()和getAnimalName(),即要求各种具体的动物给出自己的叫声和种类名称。

2)编写模拟器类Simulator
该类有一个playSound(Animal animal)方法,该方法的参数是Animal类型。即参数animal可以调用Animal的子类重写的cry方法播放具体动物的声音,调用子类重写的getAnimalName()方法显示动物种类的名称。
3)编写Animal类的子类:Dog和cat类
4)编写主类Application,
在主类Application的main方法中至少包含如下代码。
Simulator simulator=new Simulator();
Simulator.playSound(new Dog());
Simulator.playSound(new Cat());
Animal.java 文件

package cn.fjsay.java.demo4;
public abstract class Animal {
    public abstract void cry();
    public abstract String getAnimalName();
}

Cat.java 文件

package cn.fjsay.java.demo4;
class Cat extends Animal {
    @Override
    public void cry() {
        System.out.println("Cat meows");
    }

    @Override
    public String getAnimalName() {
        return "Cat";
    }
}

Dog.java文件

package cn.fjsay.java.demo4;

class Dog extends Animal {
    @Override
    public void cry() {
        System.out.println("Dog barks");
    }

    @Override
    public String getAnimalName() {
        return "Dog";
    }
}

Simulator.java 文件

package cn.fjsay.java.demo4;

class Simulator {
    public void playSound(Animal animal) {
        animal.cry();
        System.out.println("Animal type: " + animal.getAnimalName());
    }
}

Test.java 文件

package cn.fjsay.java.demo4;

public class Test {
    public static void main(String[] args) {
        Simulator simulator = new Simulator();
        simulator.playSound(new Dog());
        simulator.playSound(new Cat());
    }
}

运行结果:

Dog barks
Animal type: Dog
Cat meows
Animal type: Cat

第五题

面向抽象的编程,实现面向对象的设计原则“开闭原则”。

1定义手机类,包含有手机卡。手机与卡是关联关系,手机关联一个抽象的卡类,使得手机可以换卡,
2定义抽象的卡类SIM,该抽象类有3个抽象方法,即 getNumber(),setNumber()和getCorpName()。
3定义移动卡是抽象卡的子类,在子类中重写父类的所有抽象方法。
4定义联通卡是抽象类的子类,在子类中重写父类的所有抽象方法。
5定义一个主类,在主类的主方法中实例化一个手机,手机使用的是移动卡,电话号码是1825678956。
由于资费高,后此手机又换了联通卡,电话号码是13256891478。

CmSimCard.java文件

package cn.fjsay.java.demo5;

public class CmSimCard extends SimCard {
   private String number;

   @Override
   public String getNumber() {
       return number;
   }

   @Override
   public void setNumber(String number) {
       this.number = number;
   }

   @Override
   public String getCorpName() {
       return "移动卡";
   }
}

CuSimCard.java文件

package cn.fjsay.java.demo5;

public class CuSimCard extends SimCard{
   private String number;

   @Override
   public String getNumber() {
       return number;
   }

   @Override
   public void setNumber(String number) {
       this.number = number;
   }

   @Override
   public String getCorpName() {
       return "联通卡";
   }
}

Phone.java文件

package cn.fjsay.java.demo5;

public class Phone {
   private SimCard simCard;

   public void changeSimCard(SimCard newSimCard) {
       simCard = newSimCard;
   }

   public void makeCall() {
       String number = simCard.getNumber();
       System.out.println("手机使用的是移动卡" + simCard.getCorpName() + "电话号码是" + number);
   }
}

SimCard.java文件

package cn.fjsay.java.demo5;

public abstract class SimCard {
   public abstract String getNumber();
   public abstract void setNumber(String number);
   public abstract String getCorpName();
}

Test.java 文件

package cn.fjsay.java.demo5;

public class Test {
   public static void main(String[] args) {
       Phone p = new Phone();
       SimCard m = new CuSimCard();
       m.setNumber("1825678956");
       p.changeSimCard(m);
       p.makeCall();

       SimCard cu = new CuSimCard();
       cu.setNumber("13256891478");
       p.changeSimCard(cu);
       p.makeCall();
   }
}

运行结果:

手机使用的是移动卡联通卡电话号码是1825678956
手机使用的是移动卡联通卡电话号码是13256891478

第六题

编程题,创建一个含有指向某对象的空白final引用的类,在所有构造方法内部都执行空白final的初始化动作,说明Java确保final在使用前必须被初始化,且一旦被初始化即无法改变。下列程序给出了部分代码。请补充完成。

class Poppet{
     int i;
    Poppet(){
        
    }
    Poppet(int i){
        this.i=i;
    }
}
public class BlankFinal {
    final Poppet poppet;
}

BlankFinal.java

package cn.fjsay.java.demo6;

public class BlankFinal {
    final Poppet poppet;

    public BlankFinal() {
        poppet = new Poppet(); // 在构造方法中初始化空白final引用
    }

    public BlankFinal(int i) {
        poppet = new Poppet(i); // 在构造方法中初始化空白final引用
    }
}

Poppet.java文件

package cn.fjsay.java.demo6;

public class Poppet {
    int i;

    Poppet() {
    }

    Poppet(int i) {
        this.i = i;
    }
}

Test.java 文件

package cn.fjsay.java.demo6;

public class Test {
    public static void main(String[] args) {
        BlankFinal blankFinal1 = new BlankFinal();
        BlankFinal blankFinal2 = new BlankFinal(10);
        System.out.println(blankFinal1.poppet.i);
        System.out.println(blankFinal2.poppet.i);
    }
}

运行结果:

0
10

第七题

多态性编程题。1动物Animal可以发出叫声,void cry(){}
2子类猫Cat重写父类的cry方法,发出喵喵的叫声。
3子类Dog重写父类的cry方法,发出汪汪的叫声。
4在测试类的主方法中,编写多态的代码,父类的对象指向不同的子类实体。上转型对象调用子类重写的方法。运行期后期动态绑定方法。
Animal.java 文件

package cn.fjsay.java.demo7;

public class Animal {
    public void cry() {
        System.out.println("Animal is crying");
    }
}

Cat.java 文件

package cn.fjsay.java.demo7;

public class Cat extends Animal {
    @Override
    public void cry() {
        System.out.println("The cat is meowing");
    }
}

Dog.java文件

package cn.fjsay.java.demo7;

public class Dog extends Animal {
    @Override
    public void cry() {
        System.out.println("The dog is barking");
    }
}

Test.java 文件

package cn.fjsay.java.demo7;

public class Test {
    public static void main(String[] args) {
        Animal a1 = new Cat();
        Animal a2 = new Dog();
        a1.cry();
        a2.cry();
    }
}

运行结果“

The cat is meowing
The dog is barking

第八题

多态性编程题。
1定义一个抽象的AbstractShap类,类体中定义了抽象的方法double area();void draw();
2编写AbstractShape的子类长方形类,在长方形类中重写父类的所有抽象方法。
3编写AbstractShape的子类圆形类,在圆形类中重写父类的所有抽象方法。
4编写测试类,在主类的主方法中,通过上转型对象调用方法,分别调用子类重写的方法。
AbstractShape.java文件

package cn.fjsay.java.demo8;

public abstract class AbstractShape {
    public abstract double area();
    public abstract void draw();
}

Circle.java 文件

package cn.fjsay.java.demo8;

class Circle extends AbstractShape {
    private double radius;

    public Circle(double radius) {
        this.radius = radius;
    }

    @Override
    public double area() {
        return Math.PI * radius * radius;
    }

    @Override
    public void draw() {
        System.out.println("圆形");
    }
}

Rectangle.java 文件

package cn.fjsay.java.demo8;

class Rectangle extends AbstractShape {
    private double length;
    private double width;

    public Rectangle(double length, double width) {
        this.length = length;
        this.width = width;
    }

    @Override
    public double area() {
        return length * width;
    }

    @Override
    public void draw() {
        System.out.println("长方形");
    }
}

Test.java文件

package cn.fjsay.java.demo8;

public class Test {
    public static void main(String[] args) {
        AbstractShape shape1 = new Rectangle(5, 3);
        AbstractShape shape2 = new Circle(2.5);

        shape1.draw();
        System.out.println("面积: " + shape1.area());

        shape2.draw();
        System.out.println("面积: " + shape2.area());
    }
}

运行结果:

长方形
面积: 15.0
圆形
面积: 19.634954084936208

免责声明

本文章所有的图片以及代码等仅作为学习使用,不作为商业目的,如有侵权请联系我删除!
所提供的代码仅供参考,有很多不足请自行补充!

  • 13
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

FJSAY

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值