Java中继承与多态(续篇)

Posted nuist__NJUPT

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java中继承与多态(续篇)相关的知识,希望对你有一定的参考价值。

Java中继承与多态(续篇)

  • 按照Animal类及其子类继承关系UML图,编写代码
class Animal{
    private double weight ;
    public void eat(){
        System.out.println("我可以吃任何东西") ;
    }
}
class Bird extends Animal{
    public int numberOfWings ;
    public void fly(){
        System.out.println("我可以飞") ;
    }
}
class Fish extends Animal{
    public int numberOfFins ;
    public void swim(){
        System.out.println("我可以游泳") ;
    }
}
class Dog extends Animal{
    public int numberOfLegs ;
    public void walk(){
        System.out.println("我可以步行") ;
    }
}
public class AnimalTest {
    public static void main(String[] args){
      Bird bird = new Bird() ;
      Fish fish = new Fish() ;
      Dog dog = new Dog() ;
      bird.fly() ;
      fish.swim() ;
      dog.walk() ;
    }
}
  • 定义圆柱类Cylinder,它继承Circle类,要求定义一个圆柱高度height
  • 覆盖getArea()方法求圆柱的表面积,定义getVolume()方法求圆柱的体积
  • 定义默认构造方法和带radius和height两个参数的构造方法
import java.util.Scanner;
class Circle{
    private double centerX ;
    private double centerY ;
    public double radius ;
    public Circle(){
        this(1.0) ; //调用本类带参数的构造方法
    }
    public Circle(double radius){
        this.radius = radius ;
    }
    public double getArea(){
        return Math.PI * radius * radius ;
    }
    public double getPerimeter(){
        return 2 * Math.PI * radius ;
    }
    public void setRadius(double radius){
        this.radius = radius ;
    }
    public double getRadius(){
        return radius ;
    }

}
public class Cylinder  extends Circle{
    private double height ;
    public Cylinder(){}
    public Cylinder(double radius, double height){
        super(radius) ; //调用父类的构造方法
        this.height = height ;
    }
    @Override
    public double getArea(){ //重写父类的方法
        return super.getPerimeter() * height ;
    }
    public double getVolume(){
        return super.getArea() * height ; //调用父类的方法
    }
    public static void main(String[] args){
        Scanner input = new Scanner(System.in) ;
        System.out.println("请输入圆柱底面的半径:") ;
        double radius = input.nextDouble() ;
        System.out.println("请输入圆柱的高:") ;
        double height = input.nextDouble() ;
        Cylinder cylinder = new Cylinder(radius,height) ;
        System.out.println("圆柱的表面积是:" + cylinder.getArea()) ;
        System.out.println("圆柱的体积是:" + cylinder.getPerimeter()) ;
    }
}
/**
 * 设计一个汽车类Auto,包含double类型的成员变量speed
 * 表示启动的start()方法,表示加速的speedUp()方法,表示停止的stop()方法
 * 再设计一个Auto类的子类Bus类,在bus类中定义一个int型的passenger表示乘客
 * 另外定义上车和下车方法goOn()和goOff()
 */
class Auto{
    private double speed ;
    public void start(){
        System.out.println("汽车被启动了") ;
    }
    public void speedUp(double speed){
        this.speed = speed ;
        System.out.println("汽车的速度到达:" + speed)  ;
    }
    public void stop(){
        this.speed = 0 ;
        System.out.println("汽车停下来了") ;
    }
}
class Bus extends Auto{
    private int passenger ;
    public Bus(int passenger){
        this.passenger = passenger ;
    }
    public void goOn(int number){
        passenger += number ;
        System.out.println("车上的乘客一共" + passenger + "人") ;
    }
    public void goOff(int number){
        passenger -= number ;
        System.out.println("车上的乘客一共" + passenger + "人") ;
    }
}
public class BusTest {
    public static void main(String[] args){
        Bus bus = new Bus(0) ;
        bus.start() ;
        bus.speedUp(60) ;
        bus.stop() ;
        bus.goOn(10) ;
        bus.goOff(5) ;
    }
}

  • 定义一个正方形类Square,继承抽象类Shape,覆盖Shape类中的抽象方法getPerimeter()和getArea()
abstract class Shape{
   private String name ;
   public Shape(){}
   public Shape(String name){
       this.name = name ;
   }
   public void setName(String name){
       this.name = name ;
   }
   public String getName(){
       return name ;
   }
   public abstract double getArea() ;
   public abstract double getPerimeter() ;
}
public class Square extends Shape{
    private double side ;
    public Square(double side){
        super("正方形");
        this.side = side ;
    }
    @Override
    public double getArea() {
        return side * side ;
    }

    @Override
    public double getPerimeter() {
        return 4 * side;
    }
    public static void main(String[] args){
        Square square = new Square(2.0) ;
        square.setName("正方形") ;
        System.out.println(square.getName() + "的面积为:" + square.getArea()) ;
        System.out.println(square.getName() + "的周长为:" + square.getPerimeter()) ;
    }
}
  • 定义一个名字为Cuboid的长方体类,继承Rectangle类,包含double型的成员变量height
  • 定义一个含长宽高的构造方法,再定义一个求体积的方法
class Rectangle{
    public  double length ;
    public double width ;
    public Rectangle(double length, double width){
        this.length = length ;
        this.width = width ;
    }
}
public class Cuboid extends Rectangle{
    private double height ;
    public Cuboid(double length, double width, double height){
        super(length,width) ; //调用父类的构造方法
        this.height = height ;
    }
    public double getVolume(){
        return length * width * height ;
    }
    public static void main(String[] args){
        Cuboid cuboid = new Cuboid(10,5,2) ;
        System.out.println("长方体的体积为:" + cuboid.getVolume()) ;
    }
}

以上是关于Java中继承与多态(续篇)的主要内容,如果未能解决你的问题,请参考以下文章

C++中继承与多态

java中继承与实现接口的区别与联系是啥啊?知道的说一下,我这里谢谢了。

快速学会Java面向对象三大特征

快速学会Java面向对象三大特征

快速学会Java面向对象三大特征

快速学会Java面向对象三大特征