Java基礎——面向物件(三)抽象類
阿新 • • 發佈:2019-01-10
一、概述
1.抽象:籠統,就是比較模糊,看不懂!或者說不具體。
//抽象類
abstract class Demo{
//抽象方法
abstract void show();
}
2.特點:
- 方法只有宣告沒有實現時,該方法就是抽象方法,需要被abstract修飾。抽象方法必須定義在抽象類中。該類必須被abstract修飾。
- 抽象類不可以例項化。因為呼叫抽象方法沒意義。
- 抽象類必須有其子類覆蓋了所有的抽象方法後,該子類才可以例項化,否則該子類還是不可以被例項化,還是抽象類。
二、細節
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);
}
}