回答
閱讀Abstract Methods and Classes上的本教程。
首先,聲明一個抽象類, GraphicObject,以提供構件 變量和是完全 通過所有的子類,如 當前位置和對moveTo 方法共享方法。 GraphicObject還聲明 抽象方法的方法,如 平局或調整,即必須 所有子類實現,但必須在 不同的方式實現。該 GraphicObject類可以看起來 這樣的:
abstract class GraphicObject {
int x, y;
...
void moveTo(int newX, int newY) {
...
}
abstract void draw();
abstract void resize();
}
每個非抽象子 GraphicObject,如圓和 矩形,必須提供 實現的平局和 調整大小方法:
class Circle extends GraphicObject {
void draw() {
...
}
void resize() {
...
}
}
class Rectangle extends GraphicObject {
void draw() {
...
}
void resize() {
...
}
}
爲了在這個上構建一點,抽象類的一個方法(我們在這裏考慮'moveTo'),即使抽象類沒有代碼,也可以調用draw或resize。然後擴展類以他們自己的方式實現它們,但是'moveTo'方法對它們都是一樣的。通過這種方式,您可以將常用代碼保留在抽象類中,但仍然可以通過移動抽象方法中的部分行爲來讓它在不同的擴展類中表現不同,即孩子選擇如何實現。 – 2010-06-29 08:16:34
對於現實世界的例子,爲什麼不看java.util.AbstractCollection
?
對於一個抽象類的真實世界的例子,讓我們看看AbstractTableModel
。 AbstractTableModel
提供了一個TableModel
接口的實現(用於JTable
)。 TableModel
定義了以下方法:
public boolean isCellEditable(int rowIndex, int columnIndex);
public Class<?> getColumnClass(int columnIndex);
public int getColumnCount();
public int getRowCount();
public Object getValueAt(int rowIndex, int columnIndex);
public String getColumnName(int columnIndex);
public void addTableModelListener(TableModelListener l);
public void removeTableModelListener(TableModelListener l);
public void setValueAt(Object aValue, int rowIndex, int columnIndex);
AbstractTableModel
提供了用於所有,但這三種方法(getRowCount
,getColumnCount
,和getValueAt
)的默認實現,迫使exteding類至少提供的實施來定義大小和提供數據到表格。它還提供了一個很好的偵聽器默認處理方式,以及一系列便捷方法來將事件觸發給這些偵聽器。
這是一個很好的。 – 2010-06-29 11:16:08
我覺得這個作爲一個共同的現實世界的例子:
這可能是一個有點遠離你的要求是什麼,但可以說,我們正在使用像Hibernate的ORM框架(無需真正擔心掉什麼那就是或者它的意思,只知道我們基本上將要插入/更新和從數據庫中檢索對象)。我們將要有一個唯一的數據庫訪問對象(DAO)來執行我們期望的數據庫操作,但是需要注意的是,所有的DAO都會執行一些類似的任務這是抽象類可以幫助我們解決的地方。我們可以聲明,概述我們可能需要我們所有的DAO的一些基本操作的AbstractBaseDao類:
public class AbstractBaseDao {
public void saveOrUpdate(Object o){
//save or update object from database
}
public void loadAll(Class clazz){
//Load all from database
}
public Object loadById(Class clazz, Long id){
// Retrieve object by Id from database
}
// Additional common methods
}
所以再次它不是非常重要的方法是如何在這個例子中實現的,只要知道所有的DAO需要那些方法和抽象類使我們可以在類之間重用代碼。
現在我們BaseDao我們可以自由地爲每個表的具體和特定的DAO,至今仍是我們所期望的共同的功能:
public class PersonDao extends AbstractBaseDao{
public List<People> listAllPersonsByLastName(String lastName){
//Load people by last names from database
}
public List<People> listAllPersonsByBirthYear(Date date){
//List people by birth year from database
}
}
現在PersonDao的可以執行任何特定的任務,我們不要浪費任何時間重寫我們已經編寫的代碼。代碼重用的一個很好的例子。
我認爲這是一個在行業中使用抽象類的非常常見的例子,所以我希望它能幫助您找到所需的東西。
很好的例子,如果你使用泛型,效果會更好。 'public class AbstractBaseDao
我不理解你的例子 - 你的「AbstractBaseDao」不是抽象類。這與這個問題有什麼關係? 如果這只是一個錯字,它應該是一個抽象類 - 如果AbstractBaseDao中的所有方法都是具體的,爲什麼要使該類抽象? – SteveT 2012-07-16 21:02:10
在java編程語言中,abstract classes
是那些僅用作父類或基類的。
派生子類以實現從抽象類(基類)繼承的方法。抽象類不直接實例化。首先擴展基類,然後實例化(創建對象)。抽象類本質上是通用的,並且實現了那些通常由具有通用實現的子類使用的方法。
例如
abstract class A {
public abstract abs_value();
void show()
{
System.out.println("This is an abstract class");
}
}
- 1. 尋找真實世界的Gradle例子
- 2. 什麼是使用StringBuffer的真實世界的例子?
- 3. 什麼是抽象的新/虛擬/覆蓋/抽象關鍵字的一些真實世界的例子?
- 4. RxJava的真實世界用例對象
- 5. Multiton - 真實世界的例子?
- 6. OOPS的真實世界示例
- 7. 獲得NHibernate的聲明。真實世界的項目例子?
- 8. php中的特質 - 任何真實世界中的例子
- 9. 什麼是TDD實際應用的高質量真實世界示例?
- 10. OpenGL ES 2.0多重網格? (只是真實世界的例子)
- 11. 什麼是Scala的部分應用功能的真實世界示例
- 12. 真實世界對象
- 13. Builder模式的真實世界示例
- 14. 真實世界的反射示例
- 15. PHP:真實世界的OOP示例
- 16. sphinx doctest的真實世界使用或意義是什麼?
- 17. PHP的高級OOP功能的真實世界示例
- 18. Nhibernate的真實世界複雜的例子
- 19. 什麼是ACID的真實例子?
- 20. 真實世界中的Glassfish
- 21. 試圖在asp.net中獲取抽象類與接口的真實世界概念
- 22. 在終極版真實世界的例子關於規範
- 23. Exec的現實世界的例子
- 24. NPOI真實世界樞軸示例
- 25. 什麼是抽象的真正定義?
- 26. 尋找的「真實」的例子使用延續
- 27. jquery的真實世界實例$ .Callbacks();和它的功能
- 28. 真實世界的3D應用
- 29. 真實世界的Jython應用程序
- 30. SQL Server 2005中的分區表 - 尋找真實世界的警告
你是什麼意思的「實時示例」? – akf 2010-06-29 03:55:55
@akf,我認爲他的意思是真實的世界。 – 2010-06-29 03:58:40
@Mike Sherov:哈!我做了編輯,當我回來時,你的評論就在那裏。我同意你的解釋,並做了相應的編輯。不過,可能還是個騙局。 :) – 2010-06-29 04:00:58