NỘI DUNG BÀI VIẾT
Chúng ta đã được tiếp cận đến những bài tập Java cơ bản ở những bài viết trước. Tại bài viết này mình sẽ chia sẻ thêm cho các bạn những bài tập Java cơ bản đến nâng cao cho những người mới tiếp cận với khái niệm lập trình hướng đối tượng nhé!
Bài tập Java cơ bản đến nâng cao
Đề bài
Dưới đây mình có một số bài tập về OOP để các bạn có thể luyện tập thêm kiến thức về hướng đối tượng. Các bạn tham khảo nhé.
Bài tập 1:
- Viết một chương trình khai báo một lớp Square có thuộc tính là chiều rộng và có các phương thức sau:
- Hàm tạo không tham số.
- Hàm tạo có 1 tham số.
- Get/set cho các thuộc tính.
- Phương thức tính diện tích hình vuông.
- Phương thức tính chu vi hình vuông.
Bài tập 2:
- Viết chương trình khai báo một lớp Phương trình bậc 2 với các thuộc tính là a, b, c với các phương thức sau:
- Hàm tạo không tham số.
- Hàm tạo có 3 tham số.
- Get/set cho 3 thuộc tính.
- Phương thức tính delta.
- Phương thức tính nghiệm phương trình.
Bài tập 3:
- Viết chương trình khai báo một lớp trừu tượng Shape có hai thuộc tính là color và filled.
- Xây dựng các lớp Circle và Rectangle kế thừa lớp Shape trong đó:
- Lớp Circle có thuộc tính radius:
- Có ba phương thức khởi tạo. Phương thức khởi tạo mà không cần đối số đầu vào sẽ đặt giá trị mặc định cho radius là 1.0.
- Có các getter và setter cho cả ba phương thức.
- Có phương thức getArea và getPerimeter trả về diện tích và chu vi của hình.
- Lớp Rectangle có hai thuộc tính width và height:
- Có ba phương thức khởi tạo. Phương thức khởi tạo mà không cần đối số đầu vào sẽ đặt giá trị mặc định cho width và length là 1.0.
- Có các getter và setter cho tất cả các thuộc tính.
- Có phương thức getArea và getPerimeter trả về diện tích và chu vi của hình.
- Lớp Circle có thuộc tính radius:
Lời giải
Sau khi các bạn đã thử sức làm xong các bài tập nhỏ nhỏ ở phía bên trên thì hãy cùng xem lại các bài tập đó với lời giải của mình nhé ^^
Bài tập 1:
- Viết một chương trình khai báo một lớp Square có thuộc tính là chiều rộng và có các phương thức sau:
- Hàm tạo không tham số.
- Hàm tạo có 1 tham số.
- Get/set cho các thuộc tính.
- Phương thức tính diện tích hình vuông.
- Phương thức tính chu vi hình vuông.
- Chương trình:
public class Square { private double width; public Square() { } public Square(double width) { this.width = width; } public double getWidth() { return width; } public void setWidth(double width) { this.width = width; } public double getArea() { return this.width * width; } public double getPerimeter() { return this.width * 4; } }
Bài tập 2:
- Viết chương trình khai báo một lớp Phương trình bậc 2 với các thuộc tính là a, b, c với các phương thức sau:
- Hàm tạo không tham số.
- Hàm tạo có 3 tham số.
- Get/set cho 3 thuộc tính.
- Phương thức tính delta.
- Phương thức tính nghiệm phương trình.
- Chương trình:
package com.company; public class QuadraticEquation { private double a; private double b; private double c; public QuadraticEquation() { } public QuadraticEquation(double a, double b, double c) { this.a = a; this.b = b; this.c = c; } public double getA() { return a; } public void setA(double a) { this.a = a; } public double getB() { return b; } public void setB(double b) { this.b = b; } public double getC() { return c; } public void setC(double c) { this.c = c; } public double getDiscriminant() { //Tính delta return b * b - 4 * a * c; } public double getRoot1() { //tính nghiệm x1 return (-b + Math.sqrt(this.getDiscriminant())) / 2 * a; } public double getRoot2() { //tính nghiệm x2 return (-b - Math.sqrt(this.getDiscriminant())) / 2 * a; } }
Bài tập 3:
- Viết chương trình khai báo một lớp trừu tượng Shape có hai thuộc tính là color và filled.
- Xây dựng các lớp Circle và Rectangle kế thừa lớp Shape trong đó:
- Lớp Circle có thuộc tính radius:
- Có ba phương thức khởi tạo. Phương thức khởi tạo mà không cần đối số đầu vào sẽ đặt giá trị mặc định cho radius là 1.0.
- Có các getter và setter cho cả ba phương thức.
- Có phương thức getArea và getPerimeter trả về diện tích và chu vi của hình.
- Lớp Rectangle có hai thuộc tính width và height:
- Có ba phương thức khởi tạo. Phương thức khởi tạo mà không cần đối số đầu vào sẽ đặt giá trị mặc định cho width và length là 1.0.
- Có các getter và setter cho tất cả các thuộc tính.
- Có phương thức getArea và getPerimeter trả về diện tích và chu vi của hình.
- Lớp Circle có thuộc tính radius:
- Chương trình:
Lớp Shape
public class Shape { private String color = "green"; private boolean filled = true; public Shape() { } public Shape(String color, boolean filled) { this.color = color; this.filled = filled; } public String getColor() { return color; } public void setColor(String color) { this.color = color; } public boolean isFilled() { return filled; } public void setFilled(boolean filled) { this.filled = filled; } @Override public String toString() { return "Shape{" + "color='" + color + '\'' + ", filled=" + filled + '}'; } }
Lớp Circle
public class Circle extends Shape { private double radius = 1.0; public Circle() { } public Circle(double radius) { this.radius = radius; } public Circle(double radius, String color, boolean filled) { super(color, filled); this.radius = radius; } public double getRadius() { return radius; } public void setRadius(double radius) { this.radius = radius; } public double getArea() { return radius * radius * Math.PI; } public double getPerimeter() { return 2 * radius * Math.PI; } @Override public String toString() { return "A Circle with radius=" + getRadius() + ", which is a subclass of " + super.toString(); } }
Lớp Rectangle
public class Rectangle extends Shape { private double width = 1.0; private double length = 1.0; public Rectangle() { } public Rectangle(double width, double length) { this.width = width; this.length = length; } public Rectangle(double width, double length, String color, boolean filled) { super(color, filled); this.width = width; this.length = length; } public double getWidth() { return width; } public void setWidth(double width) { this.width = width; } public double getLength() { return length; } public void setLength(double length) { this.length = length; } public double getArea() { return width * this.length; } public double getPerimeter() { return 2 * (width + this.length); } @Override public String toString() { return "A Rectangle with width=" + getWidth() + " and length=" + getLength() + ", which is a subclass of " + super.toString(); } }