Liskov Substitution Principle về kế thừa trong Java

Hallo anh em,
Có ai giỏi về Liskov Substitution Principle (Nguyên lý thay thế Liskov) cho mình hỏi 1 chút vì mình đọc mãi thông tin các trang mà vẫn không hiểu về vấn đề này kĩ lắm :D . Mình có 1 đoạn code Java như dưới đây, trong đó có 5 lỗi vi phạm về nguyên lý Liskov. Ai hiểu rõ về nguyên lý này có thể giúp mình tìm và giải thích tại sao nó lại vi phạm được ko ? Cám ơn mọi người trước ;)

Mã:
public class Library {	
	    class Book{
	        private int site;
	        private String _title;
	        private String _autor;


	        private int _currentSite = 0;


	        public Book(int sites, String title, String autor){
	            this.site = sites;
	            this._title = title;
	            this._autor = autor;
	        }


	        public void page(){
	            if(this._currentSite<this.site){
	                this._currentSite++;
	            }
	        }


	        public void toPage(int site){
	            if(site<this.site){
	                this._currentSite = site;
	            }
	        }


	        public String getAutor(){
	            return this._autor;
	        }
	    }


	    class TelefonBook extends Book{
	        public TelefonBook(int sites){
	            super(sites,"TelefonBook",null);
	        }


	        @Override
	        public String getAutor(){
	            return "No Autor";
	        }
	    }


	    class PreviewBook extends Book{
	        // Book dient nur zur Preview in ein Book
	        private int _maxErstesites;
	        public PreviewBook(int sites, String title, String autor){
	            this(sites,title,autor,1);
	        }


	        public PreviewBook(int sites, String title, String autor, int maxErstesite){
	            super(sites,title,autor);
	            this._maxErstesites = maxErstesite;
	        }


	        @Override
	        public void page(){
	            if(super._currentSite < this._maxErstesites){
	                super.page();
	            }
	        }


	        @Override
	        public void toPage(int site){
	            if(site <= this._maxErstesites){
	                super.toPage(site);
	            }
	        }
	    }


	    class EBook extends Book{
	        // prozentual gelesenen Anteil des Bookes
	        private float percent;


	        public EBook(int sites, String title, String autor){
	            super(sites,title,autor);
	            this.percent = 0;
	        }


	        @Override
	        public void page(){
	            super.page();
	            this.percent = ((float) super._currentSite)/((float) super.site);
	        }


	        @Override
	        public void toPage(int site){
	            super.toPage(site);
	            this.percent = ((float) site)/((float) super.site);
	        }
	    }


	    class ArabischesBook extends Book{
	        ArabischesBook(int sites, String title, String autor){
	            super(sites,title,autor);
	            super._currentSite = sites;
	        }


	        @Override
	        public void page(){
	            if(super._currentSite>0){
	                super._currentSite--;
	            }
	        }
	    }
	    
	}
 
  • Chủ đề
    java kế thừa liskov
  • Top