Java,Python,Scala比较(二)类与继承

简介: UML图如下: 完整的Java代码如下: SimpleGeometricObject.javapublic class SimpleGeometricObject { private String col...

UML图如下:
这里写图片描述
完整的Java代码如下:
SimpleGeometricObject.java

public class SimpleGeometricObject {
    private String color = "white";
    private boolean filled;
    private java.util.Date dateCreated;

    /**Construct a default geometric object */
    public SimpleGeometricObject(){
        dateCreated = new java.util.Date();
    }

    /**Construct a geometric object with the specified color
     * and filled value*/
    public SimpleGeometricObject(String color, boolean filled) {
        dateCreated = new java.util.Date();
        this.color = color;
        this.filled = filled;
    }

    /**Return color*/
    public String getColor() {
        return color;
    }

    /**set a new color*/
    public void setColor(String color) {
        this.color = color;
    }

    /**Return filled. Since filled is boolean,
     * its better method is named isFilled*/
    public boolean isFilled() {
        return filled;
    }

    /**Set a new filled*/
    public void setFilled(boolean filled) {
        this.filled = filled;
    }

    /**Get dateCreated*/
    public java.util.Date getDateCreated(){
        return dateCreated;
    }

    /**Return a string representation of this object*/
    public String toString() {
        return "created on "+dateCreated+"\ncolor: "+color+" and filled: "+filled;
    }
}

CircleFromSimpleGeometricObject.java

public class CircleFromSimpleGeometricObject extends SimpleGeometricObject{
    private double radius;

    public CircleFromSimpleGeometricObject() {}

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

    public CircleFromSimpleGeometricObject(double radius, String color, boolean filled) {
        super(color, filled);
        this.radius = radius;   
    }

    /**Return radius*/
    public double getRadius() {
        return radius;
    }

    /**Set a new radius*/
    public void setRadius(double radius) {
        this.radius = radius;
    }

    /**Return area*/
    public double getArea() {
        return radius*radius*Math.PI;
    }

    /**Return diameter*/
    public double getDiameter() {
        return 2*radius;
    }

    /**Return perimeter*/
    public double getPerimeter() {
        return 2*radius*Math.PI;
    }

    /**Return the circle info*/
    public void printCircle() {
        System.out.println("The circle is created "+getDateCreated()+" and the radius is "+radius);
    }   
}

RectangleFromSimpleGeometricObject.java

public class RectangleFromSimpleGeometricObject extends SimpleGeometricObject{
    private double width;
    private double height;

    public RectangleFromSimpleGeometricObject() {}

    public RectangleFromSimpleGeometricObject(double width, double height) {
        this.width = width;
        this.height = height;
    }

    public RectangleFromSimpleGeometricObject(double width, double height, String color, boolean filled) {
        super(color, filled);
        this.width = width;
        this.height = height;
    }

    /**Return width*/
    public double getWidth() {
        return width;
    }

    /**Set a new width*/
    public void setWidth(double width) {
        this.width = width;
    }

    /**Return height*/
    public double getHeight() {
        return height;
    }

    /**Set a new width*/
    public void setHeight(double height) {
        this.height=height;
    }   

    /**Return area*/
    public double gerArea() {
        return width*height;
    }

    /**Return perimeter*/
    public double getPerimeter() {
        return 2*(width+height);
    }
}

Test.java

public class Test{
    public static void main(String[] args){
        CircleFromSimpleGeometricObject circle = new CircleFromSimpleGeometricObject(1,"red", true);
        System.out.println("A circle "+circle.toString());
        System.out.println("The color is "+circle.getColor());
        System.out.println("The radius is "+circle.getRadius());
        System.out.println("The area is "+circle.getArea());
        System.out.println("The diameter is "+circle.getDiameter());

        RectangleFromSimpleGeometricObject rect = new RectangleFromSimpleGeometricObject(2,4);
        System.out.println("\nA rectangle is "+rect.toString());
        System.out.println("The area is "+rect.gerArea());
        System.out.println("The perimeter is "+rect.getPerimeter());
    }
}

完整的Python代码如下:

import math
import datetime

class SimpleGeometricObject(object):
    def __init__(self, color, filled):
        self.__color = color
        self.__filled = filled 
        self.__date = datetime.datetime.now()

    def getColor(self):
        return self.__color

    def setColor(self, color):
        self.__color = color

    def isFilled(self):
        return self.__filled

    def setFilled(self, filled):
        self.__filled = filled

    def getDateCreated(self):
        return self.__date.strftime("%Y/%m/%d/%H:%M")

    def __str__(self):
        return  "is created on "+self.getDateCreated()+", color: "+self.__color\
                +" and filled: "+str(self.__filled)

class CircleFromSimpleGeometricObject(SimpleGeometricObject):
    def __init__(self, color, filled, radius):
        super(CircleFromSimpleGeometricObject, self).__init__(color, filled)
        self.__radius = radius

    def getRadius(self):
        return self.__radius

    def setRadius(self, radius):
        self.__radius = radius

    def getArea(self):
        return self.__radius*self.__radius*math.pi

    def getPerimeter(self):
        return 2*self.__radius*math.pi

    def getDiameter(self):
        return self.__radius*2

    def printCircle(self):
        print(self.__str__()+" and the radius is "+str(self.__radius))

class RectangleFromSimpleGeometricObject(SimpleGeometricObject):
    def __init__(self, color, filled, width, height):
        super(RectangleFromSimpleGeometricObject, self).__init__(color, filled)
        self.__width = width
        self.__height = height

    def getWidth(self):
        return self.__width

    def setWidth(self, width):
        self.__width = width

    def getHeight(self):
        return self.__height

    def setHeight(self, height):
        self.__height = height 

    def getArea(self):
        return self.__width * self.__height

    def getPerimeter(self):
        return 2*(self.__width+self.__height)

def main():
    circle = CircleFromSimpleGeometricObject("red", True, 5)
    print("A circle ", circle)
    print("The color is ", circle.getColor())
    print("The radius is %s"%circle.getRadius())
    print("The area is %s"%circle.getArea())
    print("The diameter is %s"%circle.getDiameter())

    rect = RectangleFromSimpleGeometricObject("white", False, 3, 4);
    print("\nA rectangle", rect);
    print("The area is %s"%rect.getArea());
    print("The perimeter is %s"%rect.getPerimeter());

main()

完整的Scala代码如下:

import java.util.Date;
import scala.math._;

object demo extends App {
  class SimpleGeometricObject (private var color:String="white", private var filled:Boolean=false){
    private var dateCreated:java.util.Date = new Date()

    def getColor() = color

    def setColor(color:String) = {this.color = color}

    def isFilled() = filled

    def setFilled(filled:Boolean) = {this.filled = filled}

    def getDateCreated() = dateCreated 

    override def toString()= "created on "+dateCreated+"\ncolor: "+color+" and filled: "+filled
  }

  class CircleFromSimpleGeometricObject(color:String, filled:Boolean, private var radius:Double) extends SimpleGeometricObject(color,filled){
    def this() = this("white", false, 1.0)

    def getRadius() = radius

    def setRadius(radius:Double) = {this.radius = radius}

    def getArea() = radius*radius*Pi

    def getDiameter() = radius*2

    def getPerimeter() = radius*2*Pi

    def printCircle() = {println("The circle is created "+getDateCreated+" and the radius is "+radius)}
  }

  class RectangleFromSimpleGeometricObject(color:String, filled:Boolean, private var width:Double, private var height:Double) extends SimpleGeometricObject(color, filled) {
    def this() = this("white", false, 1.0, 1.0)

    def getWidth() = width

    def setWidth(width:Double) = {this.width = width}

    def getHeight() = height

    def setHeight(height:Double) = {this.height = height}

    def getArea() = width*height

    def getPerimeter() = 2*(width+height)
  }

  var circle = new CircleFromSimpleGeometricObject("red", true, 2.0)
  println("A circle is "+circle.toString())
  println("The color is "+circle.getColor())
  println("The radius is "+circle.getRadius())
  println("The area is "+circle.getArea())
  println("The diameter is "+circle.getPerimeter()) 

  var rect = new RectangleFromSimpleGeometricObject("green", true, 3.0, 4.0)
  println("\nA rectangle is "+rect.toString())
  println("The area is "+rect.getArea())
  println("The perimeter is "+rect.getPerimeter())
}

读者可以自己从上述代码中体验三种语言的相同点与不同之处,显然,Python与Scala语言较为简洁~~



本次分享到此结束,欢迎大家交流~~

目录
相关文章
|
6天前
|
Java
Java中的继承和多态是什么?请举例说明。
Java中,继承让子类继承父类属性和方法,如`class Child extends Parent`,子类可重写父类方法。多态允许父类引用指向子类对象,如`Animal a = new Dog()`,调用`a.makeSound()`会根据实际对象类型动态绑定相应实现,增强了代码灵活性和可扩展性。
8 0
|
13天前
|
搜索推荐 Java
Java的面向对象特性主要包括封装、继承和多态
【4月更文挑战第5天】Java的面向对象特性主要包括封装、继承和多态
13 3
|
2天前
|
Python
python面型对象编程进阶(继承、多态、私有化、异常捕获、类属性和类方法)(上)
python面型对象编程进阶(继承、多态、私有化、异常捕获、类属性和类方法)(上)
22 0
|
2天前
|
索引 Python
python 格式化、set类型和class类基础知识练习(上)
python 格式化、set类型和class类基础知识练习
20 0
|
3天前
|
Python
python学习12-类对象和实例对象
python学习12-类对象和实例对象
|
24天前
|
Python
Python类(class)中self的理解
Python类(class)中self的理解
17 0
|
24天前
|
Python
Python继承:深入探索与实际应用
Python中的继承是OOP三大特性之一,允许子类继承父类的属性和方法,实现代码重用和扩展。子类通过`class`关键字和父类名定义,支持单继承和多继承。子类可覆盖父类方法,使用`super()`调用父类同名方法。继承在实际应用中如游戏开发,可创建类体系,提高代码复用性,实现模块化和层次化。掌握继承对于构建高效软件系统至关重要。
|
24天前
|
Python
Python类与对象:深入解析与应用
本文介绍了Python中的核心概念——类和对象,以及它们在面向对象编程中的应用。类是用户定义的类型,描述具有相同属性和行为的对象集合;对象是类的实例,具备类的属性和方法。文章通过示例讲解了如何定义类、创建及使用对象,包括`__init__`方法、属性访问和方法调用。此外,还阐述了类的继承,允许子类继承父类的属性和方法并进行扩展。掌握这些概念有助于提升Python编程的效率和灵活性。
|
28天前
|
Java
java中的继承
java中的继承
9 1
|
28天前
|
Java
Java类的继承
Java类的继承
7 0