亚洲精品一二区_国产黄色片网站_99久久久成人国产精品_蜜臀网_国产精品一区二区三区免费_成人av中文字幕_91精品国产欧美一区二区成人

當(dāng)前位置:首頁 > 學(xué)習(xí)資源 > 講師博文 > java抽象類的作用

java抽象類的作用 時(shí)間:2018-03-07      來源:未知

本文主要講解了java中抽象類與接口的概念、使用及它們之間的區(qū)別。這部分知識(shí)是屬于java語言中核心的知識(shí),是我們理解面向?qū)ο笏枷爰按a設(shè)計(jì)必要掌握的內(nèi)容。

Java抽象類

2 抽象類

2.1 概念及案例

假設(shè)有一個(gè)Employee和Student類,考慮一下對這兩個(gè)類的擴(kuò)展。比如每個(gè)員工或者學(xué)生都有姓名,因此可以將name放在較高層次的超類Person中。另外可以在Person中再添加一個(gè)方法getDescription,它可以返回對一個(gè)人的描述。因?yàn)椴恢肋@個(gè)人是學(xué)生還是員工,所以該方法是抽象(abstract)的,也就是沒有方法體的。

如下代碼:

public abstract class Person {

private String name;

public Person(String name){

this.name = name;

}

public String getName() {

return name;

}

public abstract void getDescription();

}

抽象類要使用關(guān)鍵字:abstract

抽象類中除了可以包含抽象方法外,也可以包含具體數(shù)據(jù)和具體方法。抽象方法充當(dāng)一個(gè)占位的角色。

擴(kuò)展抽象類可以有兩種選擇:

Ø 一種是在子類中定義部分抽象方法或不定義抽象方法,這樣就必須將子類也標(biāo)記為抽象類;

Ø 另一種是定義全部的抽象方法,這樣子類就不是抽象的了。

類即使不含抽象方法,也可以將類聲明為抽象的,不過這樣沒有什么意義。

抽象類不能被實(shí)例化。也就是說,將一個(gè)類聲明為abstract,就不能創(chuàng)建這個(gè)類的對象了,但是可以創(chuàng)建一個(gè)具體子類的對象。需要注意的是,可以定義一個(gè)抽象類的對象變量,但是它只能引用非抽象子類的對象:Person p = new Student();//這里p是一個(gè)抽象類Person的變量,但他引用非抽象子類Student的實(shí)例。

public class Student extends Person{

public Student(String name) {

super(name);

}

@Override

public void getDescription() {

System.out.println("我是一個(gè)學(xué)生!");

}

}

3 接口

3.1 概述

接口(interface)技術(shù),主要是用來描述類具有什么功能,而并不給出每個(gè)功能的具體實(shí)現(xiàn)。一個(gè)類可以實(shí)現(xiàn)(implement)一個(gè)或多個(gè)接口。

在java語言中,接口不是類,而是對一組需求的描述,實(shí)現(xiàn)接口的類要遵從接口描述的統(tǒng)一格式進(jìn)行定義。

3.2 案例

Arrays類中的sort方法可以對對象數(shù)組進(jìn)行排序,但前提是:對象所屬的類必須實(shí)現(xiàn)了Comparable接口。

下面是Comparable接口的代碼:

public interface Comparable {

public int compareTo(T o);

}

任何實(shí)現(xiàn)Comparable接口的類都需要包含compareTo方法,并且這個(gè)方法的參數(shù)是一個(gè)泛型類型。

返回一個(gè)整數(shù)值。

說明:在調(diào)用x.compareTo(y)的時(shí)候,當(dāng)x小于y時(shí),返回一個(gè)負(fù)數(shù);當(dāng)x等于y時(shí),返回0;當(dāng)x大于y時(shí),返回一個(gè)正數(shù)。

接口中的所有方法自動(dòng)地屬于public。因此,在接口中聲明方法時(shí),也可以不必提供關(guān)鍵字public.

Comparable接口只有一個(gè)方法,有些接口是可能包含多個(gè)方法的。

在接口中還可以定義常量。

接口絕不能含有實(shí)例域,也不能在接口中實(shí)現(xiàn)方法。(提供實(shí)例域和方法實(shí)現(xiàn)的任務(wù)應(yīng)該由實(shí)現(xiàn)接口的類來完成)

假設(shè)希望使用Arrays類的sort方法對Employee對象數(shù)組進(jìn)行排序,Employee類就必須實(shí)現(xiàn)Comparable接口。

實(shí)現(xiàn)一個(gè)接口,通常需要下面兩個(gè)步驟:

1. 將類聲明為實(shí)現(xiàn)給定的接口(使用關(guān)鍵字implements)

2. 對接口中的所有方法進(jìn)行定義

下面是具體代碼:

package com.ck.entity;

public class Employee implements Comparable<Employee>{

private String name;

private double salary;

public Employee(String name, double salary) {

super();

this.name = name;

this.salary = salary;

}

public Employee() {

super();

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public double getSalary() {

return salary;

}

public void setSalary(double salary) {

this.salary = salary;

}

@Override

public String toString() {

return "Employee [name=" + name + ", salary=" + salary + "]";

}

@Override

public int compareTo(Employee o) {

return Double.compare(salary, o.getSalary());

}

}

@Test

public void test1(){

Employee[] emps = new Employee[3];

emps[0] = new Employee("王五",2000);

emps[1] = new Employee("張三", 5000);

emps[2] = new Employee("李四", 4000);

Arrays.sort(emps);

for (Employee employee : emps) {

System.out.println(employee.toString());

}

}

3.3 接口的特性

1. 接口不是類,尤其不能使用new關(guān)鍵字實(shí)例化一個(gè)接口;

2. 雖然不能實(shí)例化接口,但可以聲明接口的變量:Comparable x = new Employee();

3. 如同使用instanceof檢查一個(gè)對象是否屬于某個(gè)特定類一樣,也可以使用instanceof檢查一個(gè)對象是否實(shí)現(xiàn)了某個(gè)特定的接口:if(anObject instanceof Comparable){…}

4. 與可以建立類的繼承關(guān)系一樣,接口也可以擴(kuò)展:public interface A{} public interface B extends A{}

5. 雖然接口中不能包含實(shí)例域或者靜態(tài)方法,但卻可以包含常量:public interface A{ double x=50; },與接口中的方法都自動(dòng)的被設(shè)置為public一樣,接口中的域?qū)⒈蛔詣?dòng)設(shè)為public static final

6. 每個(gè)類只能擁有一個(gè)超類,但卻可以實(shí)現(xiàn)多個(gè)接口。public class A implement B,C{}

4 接口與抽象類的區(qū)別

4.1 語法方面的區(qū)別

1. 抽象類可以提供成員方法的實(shí)現(xiàn)細(xì)節(jié),而接口中只能存在public abstract方法;

2. 抽象類中的成員變量可以是各種類型的,而接口中的成員變量只能是public static final類型的;

3. 接口中不能含有靜態(tài)代碼塊及靜態(tài)方法,而抽象類可以有靜態(tài)代碼塊和靜態(tài)方法;

4. 一個(gè)類只能繼承一個(gè)抽象類,但卻可以實(shí)現(xiàn)多個(gè)接口

4.2 設(shè)計(jì)方面的區(qū)別

抽象類是對一種事物的抽象,即對類的抽象;而接口是對行為的抽象。抽象類是對整個(gè)類整體進(jìn)行抽象,包括屬性、行為;接口是對類局部(行為)進(jìn)行抽象。比如:飛機(jī)和鳥不是同類的事物,但是它們都有一個(gè)共性---會(huì)飛。那么在設(shè)計(jì)的時(shí)候,可以將飛機(jī)設(shè)計(jì)為一個(gè)類Plane,將鳥設(shè)計(jì)為一個(gè)類Bird,但是不能將飛行這個(gè)特性也設(shè)計(jì)為一個(gè)類,因?yàn)樗皇且粋(gè)行為,并不是對一類事物的抽象描述。此時(shí),可以將飛行設(shè)計(jì)為一個(gè)接口Fly,包含方法fly(),然后Plane和Bird分別根據(jù)自己的需要實(shí)現(xiàn)Fly這個(gè)接口。然后至于有不同種類的飛機(jī),比如戰(zhàn)斗機(jī)、民用飛機(jī)等直接繼承Plane即可,對于鳥類也是類似的,不同種類的鳥直接繼承Bird類即可。(從這個(gè)例子中能看出,繼承是一個(gè)“是不是”的關(guān)系,而接口實(shí)現(xiàn)則是“有沒有、具備不具備”的關(guān)系)

上一篇:java抽象類的作用

下一篇:java file類創(chuàng)建文件

戳我查看嵌入式每月就業(yè)風(fēng)云榜

點(diǎn)我了解華清遠(yuǎn)見高校學(xué)霸學(xué)習(xí)秘籍

猜你關(guān)心企業(yè)是如何評(píng)價(jià)華清學(xué)員的

干貨分享
相關(guān)新聞
前臺(tái)專線:010-82525158 企業(yè)培訓(xùn)洽談專線:010-82525379 院校合作洽談專線:010-82525379 Copyright © 2004-2024 北京華清遠(yuǎn)見科技發(fā)展有限公司 版權(quán)所有 ,京ICP備16055225號(hào)-5京公海網(wǎng)安備11010802025203號(hào)

回到頂部

主站蜘蛛池模板: 国产精品高清久久久久久久 | 免费观看视频网站 | 欧美日韩一区二区综合在线视频 | 激情网站在线 | 免费日韩一级片 | 国产一区二区福利 | 欧美成人激情在线 | 亚洲图片 中文字幕 | 天天爽天天爱 | 国产精品99久久免费黑人 | 99免费观看视频 | 欧美巨大xxxx做受孕妇视频 | www.youjizz.日本| 99国产精品免费观看视频 | 欧美人xxxx | 国产一卡2卡3卡四卡网站 | 天天操夜夜噜 | 天天干天天插 | 亚洲欧美日韩国产精品26u | 欧美高清色视频在线播放 | 国产成人精品999在线观看 | 国产精品亚洲综合久久 | 九九热九九热 | 午夜一区二区在线观看 | 毛片免费视频网站 | 91综合网 | 人人玩人人添人人澡欧美 | 国产裸体美女视频全黄 | 久久国产精品二国产精品 | 中日韩免费视频 | a成人毛片免费观看 | 日本高清香蕉色视频在线观看 | 两个人的视频www免费 | 艹久久 | 欧美亚洲国产精品久久高清 | 国产精品久久久久久久毛片 | 欧美一区二 | xxx性视频| 亚洲特黄 | 男女午夜性爽快免费视频不卡 | 黄色18网站|