1. 程式人生 > >Java基礎——面向物件(三)抽象類

Java基礎——面向物件(三)抽象類

一、概述

1.抽象:籠統,就是比較模糊,看不懂!或者說不具體。

//抽象類
abstract class Demo{
    //抽象方法
    abstract void show();

}

2.特點:

  1. 方法只有宣告沒有實現時,該方法就是抽象方法,需要被abstract修飾。抽象方法必須定義在抽象類中。該類必須被abstract修飾。
  2. 抽象類不可以例項化。因為呼叫抽象方法沒意義。
  3. 抽象類必須有其子類覆蓋了所有的抽象方法後,該子類才可以例項化,否則該子類還是不可以被例項化,還是抽象類。

二、細節

 1.抽象類中有建構函式嗎?

有,用於給子類物件進行初始化。

2.抽象類可以不定義抽象方法嗎?

可以的。但是很少見,目的就是不讓該類建立物件。AET的介面卡物件就是這種類。

通常這個類中的方法有方法體,但是卻沒有內容。

3.抽象關鍵字不可以和哪些關鍵字共存?

  • private不行。抽象方法必須被覆蓋。
  • static不行。靜態不需要物件。
  • final不行。final不可以被繼承,abstract必須被繼承才能例項化。

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

相同點:抽象類和一般類都是用來描述事物的,都在內部定義了成員。

不同點:

  • 一般類有足夠的資訊描述事物。抽象類描述事務的資訊有可能不足。
  • 一般類中不能定義抽象方法。抽象類中可以定義一般方法。
  • 一般類可以例項化。抽象類不可以被例項化。

5.抽象類一定是個父類麼?

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

三、僱員例項

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

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


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

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

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

//描述僱員。

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 Employee
{
	Programmer(String name,String id,double pay)
	{
		super(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("manage");
	}
}






class  AbstractTest
{
	public static void main(String[] args) 
	{
		System.out.println("Hello World!");
	}
}


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 void setName(String name)
	{
		this.name = name;
	}
}
class Student extends Person
{
	Student(String name,int age)
	{
		super(name,age);
	}

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

}