最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java深入探究關(guān)鍵字abstract的使用

 更新時(shí)間:2022年05月17日 09:56:34   作者:小老師ir  
如果一個(gè)方法使用 abstract 來修飾,則說明該方法是抽象方法,抽象方法只有聲明沒有實(shí)現(xiàn)。需要注意的是 abstract 關(guān)鍵字只能用于普通方法,不能用于 static 方法或者構(gòu)造方法中

1. 理解

abstract:抽象的

2. 作用

  • abstract可以用來修飾類、方法。
  • 不能用abstract修飾變量、代碼塊、構(gòu)造器。
  • 不能用abstract修飾私有方法、靜態(tài)方法、final的方法、final的類。

3. 修飾類-抽象類

  • 抽象類中一定有構(gòu)造器,便于子類實(shí)例化時(shí)調(diào)用(涉及:子類對(duì)象實(shí)例化的全過程)。
  • 開發(fā)中,都會(huì)提供抽象類的子類,讓子類對(duì)象實(shí)例化,完成相關(guān)的操作。
  • 抽象類不能被實(shí)例化。抽象類是用來被繼承的,抽象類的子類必須重寫父類的抽象方法,并提供方法體。若沒有重寫全部的抽象方法,仍為抽象類。

4. 修飾方法-抽象方法

抽象方法只有方法的聲明,沒有方法的實(shí)現(xiàn)。以分號(hào)結(jié)束。

public abstract void talk(); 

含有抽象方法的類必須被聲明為抽象類。反之,抽象類中可以沒有抽象方法的。

  • 若子類重寫了父類中的所有的抽象方法后,此子類方可實(shí)例化 。
  • 若子類沒有重寫父類中的所有的抽象方法,則此子類也是一個(gè)抽象類,需要使用abstract修飾。

5. 代碼演示

public class AbstractTest {
	public static void main(String[] args) {		
		//一旦Person類抽象了,就不可實(shí)例化
//		Person p1 = new Person();
//		p1.eat();		
	}
}
abstract class Creature{
	public abstract void breath();
}
abstract class Person extends Creature{
	String name;
	int age;	
	public Person(){		
	}
	public Person(String name,int age){
		this.name = name;
		this.age = age;
	}	
	//不是抽象方法:
//	public void eat(){
//		
//	}
	//抽象方法
	public abstract void eat();	
	public void walk(){
		System.out.println("人走路");
	}		
}
class Student extends Person{	
	public Student(String name,int age){
		super(name,age);
	}
	public Student(){
	}	
	public void eat(){
		System.out.println("學(xué)生多吃有營養(yǎng)的食物");
	}
	@Override
	public void breath() {
		System.out.println("學(xué)生應(yīng)該呼吸新鮮的沒有霧霾的空氣");
	}
}

6. 經(jīng)典題目

public class Test1 {
    public static void main(String args[]) {
        A a = new B();
        a.m1();//B類中定義的m1方法
        a.m2();//A類中定義的m2方法
    }
}
abstract class A {
    abstract void m1();
    public void m2() {
        System.out.println("A類中定義的m2方法");
    } 
}
class B extends A {
    void m1() {
        System.out.println("B類中定義的m1方法");
    } 
}

7. 抽象類的匿名子類

public class PersonTest {	
	public static void main(String[] args) {	
		//匿名對(duì)象		
		method(new Student());
		//非匿名的類非匿名的對(duì)象
		Worker worker = new Worker();
		method1(worker);
		//非匿名的類匿名的對(duì)象
		method1(new Worker());
		//創(chuàng)建了一匿名子類的對(duì)象:p
		Person p = new Person(){
			@Override
			public void eat() {
				System.out.println("吃東西");
			}
			@Override
			public void breath() {
				System.out.println("好好呼吸");
			}			
		};		
		method1(p);
		//創(chuàng)建匿名子類的匿名對(duì)象
		method1(new Person(){
			@Override
			public void eat() {
				System.out.println("吃好吃東西");
			}
			@Override
			public void breath() {
				System.out.println("好好呼吸新鮮空氣");
			}
		});
	}		
	public static void method1(Person p){
		p.eat();
		p.breath();
	}	
	public static void method(Student s){		
	}
}
class Worker extends Person{
	@Override
	public void eat() {
	}
	@Override
	public void breath() {
	}	
}

8. 應(yīng)用-模板方法設(shè)計(jì)模式(TemplateMethod)

抽象類體現(xiàn)的就是一種模板模式的設(shè)計(jì),抽象類作為多個(gè)子類的通用模板,子類在抽象類的基礎(chǔ)上進(jìn)行擴(kuò)展、改造,但子類總體上會(huì)保留抽象類的行為方式。

當(dāng)功能內(nèi)部一部分實(shí)現(xiàn)是確定的,一部分實(shí)現(xiàn)是不確定的。這時(shí)可以把不確定的部分暴露出去,讓子類去實(shí)現(xiàn)。

換句話說,在軟件開發(fā)中實(shí)現(xiàn)一個(gè)算法時(shí),整體步驟很固定、通用,這些步驟已經(jīng)在父類中寫好了。但是某些部分易變,易變部分可以抽象出來,供不同子類實(shí)現(xiàn)。這就是一種模板模式。

模板方法設(shè)計(jì)模式是編程中經(jīng)常用得到的模式。各個(gè)框架、類庫中都有他的影子,比如常見的有:

 數(shù)據(jù)庫訪問的封裝;

  • Junit單元測(cè)試;
  • JavaWebServlet中關(guān)于doGet/doPost方法調(diào)用;
  • Hibernate中模板程序;
  • SpringJDBCTemlate、HibernateTemplate等;
abstract class Template {
   public final void getTime() {
      long start = System.currentTimeMillis();
      code();
      long end = System.currentTimeMillis();
      System.out.println("執(zhí)行時(shí)間是:" + (end - start));
    }
      public abstract void code();
}
class SubTemplate extends Template {
      public void code() {
        for (int i = 0; i < 10000; i++) {
        System.out.println(i);
        } 
      } 
}

到此這篇關(guān)于Java深入探究關(guān)鍵字abstract的使用的文章就介紹到這了,更多相關(guān)Java abstract內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 老生常談java路徑中的反斜杠和斜杠的區(qū)別

    老生常談java路徑中的反斜杠和斜杠的區(qū)別

    下面小編就為大家?guī)硪黄仙U刯ava路徑中的反斜杠和斜杠的區(qū)別。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-04-04
  • MyBatis方法重載的陷阱及解決方案

    MyBatis方法重載的陷阱及解決方案

    在使用 MyBatis 進(jìn)行開發(fā)時(shí),尤其是使用注解模式(如 @Select、@Insert 等)時(shí),開發(fā)者常常會(huì)遇到這樣一個(gè)問題:為什么我的方法重載不能正常工作?這篇文章將深入探討 MyBatis 的這個(gè)特性及如何規(guī)避相關(guān)的坑,需要的朋友可以參考下
    2024-09-09
  • Java中的ConcurrentLinkedQueue松散隊(duì)列解析

    Java中的ConcurrentLinkedQueue松散隊(duì)列解析

    這篇文章主要介紹了Java中的ConcurrentLinkedQueue松散隊(duì)列解析,鏈表是松散的,鏈表節(jié)點(diǎn)并不都是有效的,允許存在無效節(jié)點(diǎn)val=null,但是只有最后一個(gè)節(jié)點(diǎn)才能next=null,需要的朋友可以參考下
    2023-12-12
  • java實(shí)現(xiàn)微信App支付服務(wù)端

    java實(shí)現(xiàn)微信App支付服務(wù)端

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)微信App支付服務(wù)端,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-10-10
  • SpringBoot 監(jiān)控管理模塊actuator沒有權(quán)限的問題解決方法

    SpringBoot 監(jiān)控管理模塊actuator沒有權(quán)限的問題解決方法

    這篇文章主要介紹了SpringBoot 監(jiān)控管理模塊actuator沒有權(quán)限的問題解決方法,需要的朋友可以參考下
    2017-12-12
  • Java框架Quartz中API、Jobs和Trigger詳解

    Java框架Quartz中API、Jobs和Trigger詳解

    這篇文章主要介紹了Java框架Quartz中API、Jobs和Trigger詳解,JobDetail?對(duì)象是在將?job?加入?scheduler?時(shí),由客戶端程序(你的程序)創(chuàng)建的,它包含?job?的各種屬性設(shè)置,以及用于存儲(chǔ)?job?實(shí)例狀態(tài)信息的?JobDataMap,需要的朋友可以參考下
    2023-11-11
  • Java時(shí)間輪算法的實(shí)現(xiàn)代碼示例

    Java時(shí)間輪算法的實(shí)現(xiàn)代碼示例

    本篇文章主要介紹了Java時(shí)間輪算法的實(shí)現(xiàn)代碼示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-08-08
  • 淺談java.util.concurrent包中的線程池和消息隊(duì)列

    淺談java.util.concurrent包中的線程池和消息隊(duì)列

    這篇文章主要介紹了淺談java.util.concurrent包中的線程池和消息隊(duì)列,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • Java刪除String中指定字符的11種方法匯總

    Java刪除String中指定字符的11種方法匯總

    這篇文章主要給大家介紹了關(guān)于Java刪除String中指定字符的11種方法,在Java中String類提供了許多方法來處理字符串,其中包括刪除指定字符的方法,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-11-11
  • java SpringSecurity使用詳解

    java SpringSecurity使用詳解

    這篇文章主要介紹了java中Spring Security的實(shí)例詳解的相關(guān)資料,spring security是一個(gè)多方面的安全認(rèn)證框架,提供了基于JavaEE規(guī)范的完整的安全認(rèn)證解決方案,需要的朋友可以參考下
    2021-08-08

最新評(píng)論

营山县| 彭山县| 洛南县| 时尚| 兴山县| 乌兰县| 上林县| 芮城县| 奈曼旗| 商河县| 仁化县| 广南县| 游戏| 扎鲁特旗| 曲靖市| 曲松县| 柯坪县| 连南| 白河县| 安康市| 凌云县| 隆安县| 余干县| 宁都县| 东海县| 三原县| 莱芜市| 安溪县| 延庆县| 威海市| 赤城县| 上思县| 和林格尔县| 永善县| 湖口县| 哈巴河县| 凌海市| 宜阳县| 南郑县| 西安市| 特克斯县|