~~~
/*
abstract:是一個修飾符
可以修飾方法,類
1.當我們多個類存在相同的功能,但是功能的主體不同,這時我們
進行向上抽取,只抽取功能的定義,不抽取功能的主體
抽象類的特點:
1.抽象方法一定要在抽象類中
2.抽象類和抽象方法必須要被abstract關鍵字修飾
3.抽象的類是不能被創建對象,因為調用抽象的方法沒意義
4.抽象類中的方法要被使用,必須由子類重寫抽象類中的方法,然后創建子類對象調用
5.抽象類中可以定義非抽象的方法,有時候我們需要此類不能被new關鍵字創建時,可以用
abstract將此類變成抽象類
6.子類如果只重寫一部分的抽象方法,那么該子類還是一個抽象類,如果抽象類的方法要被使用,子類
必須重寫抽象類中的所有方法
值得注意:
抽象類和普通的類沒有太大的不同。
1.抽象類無法通過new關鍵字創建對象
2.抽象類里面可有抽象的方法
*/
~~~
~~~
package obj.c3;
abstract class Animal{
abstract void sing();
}
class Cat extends Animal{
void sing(){
System.out.println("喵喵唱歌");
}
}
class Dog extends Animal{
void sing(){
System.out.println("汪汪唱歌");
}
}
public class Test {
public static void main(String[] args){
Animal c=new Cat();
c.sing();
}
}
~~~
模板方法設計模式
~~~
package obj.c4;
/**
求一段代碼運行所花費的時間
原理:結束時間-開始時間
System.currentTimeMillis()//返回以毫秒為單位的當前時間。
*/
abstract class Demo{//abstract防止該類被new關鍵字創建
public final void getTime(){//final防止該方法被重寫
long start =System.currentTimeMillis();//1秒=1000毫秒
function();
long stop =System.currentTimeMillis();
System.out.println("共花費了"+(stop-start));
}
public abstract void function();//提供給外界重寫的抽象方法
}
class Demo1 extends Demo{
public void function(){
for(int i=0;i<1000;i++){
System.out.println("f");
}
}
}
public class Test {
public static void main(String[] args) {
Demo1 a=new Demo1();
a.getTime();
}
}
~~~
- 書寫心得
- 1.初識Java
- 2.變量、數據類型和運算符
- 實例:數據的輸入
- 實例:變量互換
- 3.條件選擇結構
- 案例:判斷年份是否為閏年
- 案例:生成隨機數
- 實例:剪刀石頭布
- 4.循環結構
- 實例:猜數字游戲
- Myeclipse
- 實例:九九乘法表
- 實例:日歷
- 5.數組
- JVM內存分析
- 鍵盤錄入賦值數組
- 數組的length屬性
- 數組的最大值(打擂臺)
- 數組的排序
- 數組復制算法
- 數組的查找算法(搜索)
- 數組的插入算法
- 數組的冒泡算法
- 數組的選擇排序
- 多維數組
- 實例:學生成績管理系統
- 類和對象
- 概念
- 內存分析
- 創建類和對象
- 面向對象與內存分析
- 有參數無(有)返回值的調用
- 成員變量
- return和多參方法
- toString方法
- this關鍵字
- 封裝
- 方法的重載
- 構造方法
- 階段性總結
- 實例:學生管理系統
- Test.java
- Student.java
- Admin.java
- 構造代碼塊及構造函數之間的調用
- main方法和靜態應用工具類及classpath
- static關鍵字
- 文檔注釋和靜態代碼塊及單例模式
- 繼承
- 多態
- 匿名對象和toString()和equals及final
- 抽象類和模板方法設計模式
- 接口
- 包機制和包與包之間的訪問權限和jar包