[Java] Ví dụ về lớp trừu tượng và phương thức trừu tượng (abstract) - Tính tổng S [Lập trình hướng đối tượng - OOP]

Xây dựng Project theo mô hình kế thừa sau:

Trong đó: 
S1= 1+3+5+...+(2*n+1).
S2=1!+2!+3!+...+m!
S3=1!/x^1+2!/x^2+3!/x^3+...n!/x^n
(với x, n, m nhập vào từ bàn phím; thỏa mãn 1 <= x <= 3, 1 <= n <= 10, 1<= m <= 7.)

[NetBean]
1. Xây dựng Project như sau:

2. Code:
//-------------------------------------------
// class TinhS
//-------------------------------------------

package vd_abstract_140114;
public abstract class TinhS {
    float x;
    int n,m;
    String tenPT;
    // constructor
    public TinhS(){
        this.x=0; this.n=0; this.m=0;this.tenPT="";
    }
    // Tinh giai thua
    long GiaiThua(int n){
        long gt=1;
        for(int i=1;i<=n;i++)
            gt*=i;
        return gt;
    }
    // Phuong thuc truu tuong (abstract)
    abstract float TinhS();
      
    // In ket qua
    void InKQ(){
        System.out.print("\n + "+tenPT+"= "+TinhS()+"\n");        
    }
    
}

//-------------------------------------------
// class S1
//-------------------------------------------

package vd_abstract_140114;
public class S1 extends TinhS{
    // constructor
    public S1(int n){
        this.n=n;
        this.tenPT="S1";
    }
    // Tinh S1
    float TinhS(){
        long s=0;
        for(int i=1;i<=2*n+1;i=i+2)
            s+=i;
        return s;
    }    
}



//-------------------------------------------
// class S2
//-------------------------------------------

package vd_abstract_140114;
public class S2 extends TinhS{
    // constructor
    public S2(int m){
        this.m=m;
        this.tenPT="S2";
    }
    // Tinh S1
    float TinhS(){
        long s=0;
        for(int i=1;i<=m;i++)
            s+=GiaiThua(i);
        return s;
    }    
}

//-------------------------------------------
// class S3
//-------------------------------------------
package vd_abstract_140114;
public class S3 extends TinhS{
    // constructor
    public S3(float x, int n){
        this.n=n;
        this.x=x;
        this.tenPT="S3";
    }
    // Tinh S1
    float TinhS(){
        float s=0,m=x;
        for(int i=1;i<=n;i++)
        {
            s+=(float)GiaiThua(i)/m;
            m*=x;
        }
        return s;
    }    
}
//-------------------------------------------
// class VD_abstract_140114

/*
 * http://www.laptrinhmaytinh.net
 */

package vd_abstract_140114;

import java.util.Scanner;

public class VD_abstract_140114 {
    public static void main(String[] args) {
       // Nhap x,n,m
        float x;
        int n,m;
        System.out.print("\n NHAP DU LIEU DAU VAO: ");
        Scanner inp=new Scanner(System.in);
        try{
           // nhap x
            do{
                System.out.print("\n + x= ");
                x=inp.nextFloat();
                if(x<1||x>3)
                   System.out.print("\n >> Nhap lai x! ");                            
            }while(x<1||x>3);
            // nhap n
           do{
                System.out.print("\n + n= ");
                n=inp.nextInt();
                if(n<1||n>10)
                   System.out.print("\n >> Nhap lai n! ");                            
            }while(n<1||n>10);
           // nhap m
           do{
                System.out.print("\n + m= ");
                m=inp.nextInt();
                if(m<1||m>7)
                   System.out.print("\n >> Nhap lai m! ");                            
            }while(m<1||m>7);
           System.out.print("\n KET QUA: ");
            // khai bao doi tuong
            S1 t=new S1(n);
            t.InKQ();
            S2 t1=new S2(m);
            t1.InKQ();
            S3 t2=new S3(x,n);
            t2.InKQ();
           
        }catch(Exception e){
        System.out.print("\n * Da co loi xay ra! Ma loi: "+e.toString());
    }           
  }
}

Một số tài liệu và khoá học bổ ích dành cho bạn: 

# Tài liệu: Lập trình hướng đối tượng JAVA core dành cho người mới bắt đầu học lập trình [Click để xem]

# Khoá học online: Lập trình Java trong 4 tuần [Click để xem]