JAVA筆記-抽象類

抽象類
一、抽象類聲明格式:abstract class xx
二、抽象類特點:1.被abstract修飾

2.抽象類中不一定有抽象方法,但有抽象方法一定是抽象類
				abstract class A{
					public void B(){}
					public abstract void B(){} //編譯報錯,抽象方法不能有方法體
					public abstract void B();  //正確寫法
				}//可以編譯
				class A{
					public abstract void B();
				}//編譯報錯,有抽象方法必是抽象類	
3.抽象類的實例化

a:抽象類不能直接實例化           

                                           abstract class A{}
					class abstractDemo{
						public static void main(String[] args){
							A a=new A();//出錯
						}
					}

b:抽象類可以通過多態的方式實例化                                                                                          

					abstract class A{}
					class B extends A{}
					class abstractDemo{
						public static void main(String[] args){
							A a=new B();//多態向上轉型
						}
					}

4.抽象類子類
a:抽象類子類也應是一個抽象類(不重寫抽象方法)
abstract class A{}
abstract class B extends A{}
b:子類不是抽象類,是具體的類(應該重寫抽象方法)
						abstract class A{
							public abstract void a{}
						}
						class B extends A{
							public void a{
								syso("重寫抽象方法");
							}
						}



三、抽象類的成員特點:
1.成員變量:
既可以是變量也可以是常量
abstract class A{
				public int num=10;
				public final int num2=20;
			}
			class B extends A{}
			class abstractDemo{
				public static void main(String[] args){
					syso(num+" "+num2);//輸出10 20
				}
			}



2.構造方法:有
用來子類訪問父類數據初始化

3.成員方法:
抽象方法:強制要求子類做的事情
普通成員方法:子類繼承的事情,提高代碼複用性
abstract class Person{
				public abstract void breath();//每人都要呼吸,即強制子類做事。
				public void eat(){
					syso("喫飯");
				}//提高代碼複用性
			}
			class Student extends Person{
				public void breath(){
					syso("需要呼吸")
				}
			}
			class Teacher extends Person{
				public void breath(){
					syso("需要呼吸")
				}
			}

     四、抽象類練習員工案例

/*
	假如我們在開發一個系統時需要對員工類進行設計,員工包含3個屬性:姓名、工號以及工資。
	經理也是員工,除了含有員工的屬性外,另爲還有一個獎金屬性。
	請使用繼承的思想設計出員工類和經理類。要求類中提供必要的方法進行屬性訪問。
	
	分析:
		普通員工類
			成員變量:姓名、工號以及工資。
			成員方法:工作
		經理類:
			成員變量:姓名、工號以及工資,獎金屬性
			成員方法:工作
			
	實現:
		員工類:
		職員類:
		經理類:
*/

//員工類
abstract class Employee{
	//成員屬性姓名,員工號,工資
	private String name;
	private int employeeid;
	private double salary;
	
	public Employee() {}
	public Employee(String name,int employeeid,double salary) {
		this.name=name;
		this.employeeid=employeeid;
		this.salary=salary;
	}
	//抽象方法工作
	public abstract void work();
	public void show() {
		System.out.println("姓名:"+name+" 職員號 :"+employeeid+" 薪水:"+salary);
	}
}

//職工類
class Worker extends Employee{
	public Worker() {}
	public Worker(String name,int employeeid,double salary) {
		super(name,employeeid,salary);
	}
	public void work() {
		System.out.println("職員做基層工作");
	}
}

//經理類
class Manager extends Employee{
	//特有屬性獎金
	private double bonus;
	
	public Manager() {}
	public Manager(String name,int employeeid,double salary,double bonus) {
		super(name,employeeid,salary);
		this.bonus=bonus;
	}
	public void work() {
		System.out.println("經理做管理工作");
	}
	//特有方法
	public void getBonus() {
		System.out.println("獎金:"+bonus);
	}
}

class Test{
	public static void main(String[] args){
		//普通員工,用多態
		Employee worker=new Worker("Mike",3,4000);
		worker.show();
		worker.work();
		System.out.println("---------------------");
		//測試經理,自己調用,因爲有特有方法
		Manager manager=new Manager("Jike",1,8000,2000);
		manager.show();
		manager.getBonus();
		manager.work();
	}
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章