1. 程式人生 > >抽象類 抽象類和一般類的異同點

抽象類 抽象類和一般類的異同點

抽象類  abstract

說白了,就是不讓抽象類建立物件

抽象:籠統,模糊,看不懂!不具體。

當多個類中出現相同功能,但是功能主題不同,這是可以進行向上抽取的。

這時,只抽取功能定義,而不抽取功能主體。


特點:

1,抽象方法一定在抽象類中

2,抽象方法和抽象類都必須被abstract關鍵字修飾。

3,抽象類不可以new物件。

4,抽象類中的抽象方法要被使用,必須由子類覆寫所有的抽象方法後,建立自物件呼叫。如果只覆蓋部分抽象方法,那麼該子類還是抽象類。

舉例子

avstract 的類和方法,強制讓繼承他的類去覆寫,去實現方法。

還是餐廳,炒菜,我點菜,是抽象的,點完菜後,強制廚師跟我做菜,將我點的菜例項化。

1,抽象類中有建構函式嗎?
有,用於給子類物件進行初始化。

2,抽象類可以不定義抽象方法嗎?
可以的。 但是很少見,目的就是不讓該類建立物件。AWT的介面卡物件就是這種類。
通常這個類中的方法有方法體,但是卻沒有內容。

abstract class Demo
{
void show1(); //這叫沒方法體

void show2()
{}//這叫有方法體沒內容。(其實有個return)

}

3,抽象關鍵字不可以和那些關鍵字共存?

private 不行非法的修飾符組合

static   不行非法的修飾符組合

final不行

4,抽象類一定是個父類嗎?

是的。因為需要子類覆蓋其方法後才可以對子類例項化


抽象類和一般類的異同點。

相同點:
抽象類和一般類都是用來描述事物的,都在內部定了成員。
不同:
1,一般類有足夠的資訊描述事物。
  抽象類描述事物的資訊有可能不足。
2,一般類中不能定義抽象方法,只能定非抽象方法。
  抽象類中可定義抽象方法,同時也可以定義非抽象方法。
3,一般類可以被例項化。

  抽象類不可以被例項化。

僱員示例:

需求:公司中程式設計師有姓名,工號,薪水,工作內容。
專案經理除了有姓名,工號,薪水,還有獎金,工作內容。
對給出需求進行資料建模。

分析:
在這個問題領域中,先找出涉及的物件。
通過名詞提煉法。
程式設計師:
屬性:姓名,工號,薪水、
行為:工作。
經理:
屬性:姓名,工號,薪水,獎金。
行為:工作。

程式設計師和經理不存在著直接繼承關係,



但是程式設計師和經理卻具有共性內容。
可以進行抽取。因為他們都是公司的僱員 

可以將程式設計師和經理進行抽取.建立體系.

// 僱員
abstract class Employee
{
	private String name;
	private String id;
	private double pay;
	Employee(String name,String id,double pay)
	{
	this.name=name;
	this.id=id;
	this.pay=pay;
	}

	public abstract void work();

}
// 程式設計師
class Programmer extends Emploryee
{
	Programmer(String name,String id, double pay)
	{
			suprt(name,id,pay);
	}
	public void work()
	{
		System.out.println("code..");
	}
}

//經理
class Manager extends Employee
{
	private int bonus;
	Manager(String name,String id ,double pay,int bonus)
	{
		super(name,id,pay);
		this.bonus=bonus;
	}
	public void work()
	{
		System.out.println("manager");
	}
}

class AbstractDemo
{
	public static void main (String [] args)
	{

	}
}

class Person
{
	private String name;
	private int age;

	Person(String name,int age)
	{
		this.name=name;
		this.age=age;
	}
	public String getName()
	{
		return name;
	}
	public String setName()
	{
		this.name=name;
	}
}

class Student extends Person
{
	Student (String name,int age)
	{
		super(name,age);
	}
}


5,抽象類一定是個父類嗎?

是的。因為需要子類覆蓋其方法後才可以對子類例項化