成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

java抽象函數(shù)代碼,JAVA抽象類和抽象方法

類函數(shù)、成員函數(shù)、靜態(tài)函數(shù)、抽象函數(shù)、方法偽裝屬性

本篇博客是滾雪球?qū)W Python 第二輪的最后一篇博客,我們將內(nèi)容繼續(xù)提升到面向?qū)ο蟛糠?,為你補(bǔ)充類里面的一些裝飾器,學(xué)習(xí)之后,希望你的 Python 基礎(chǔ)知識(shí)可以更上一層樓。

十年品牌的成都網(wǎng)站建設(shè)公司,成百上千企業(yè)網(wǎng)站設(shè)計(jì)經(jīng)驗(yàn).價(jià)格合理,可準(zhǔn)確把握網(wǎng)頁(yè)設(shè)計(jì)訴求.提供定制網(wǎng)站建設(shè)、成都商城網(wǎng)站開(kāi)發(fā)、小程序開(kāi)發(fā)、成都響應(yīng)式網(wǎng)站建設(shè)公司等服務(wù),我們?cè)O(shè)計(jì)的作品屢獲殊榮,是您值得信賴的專業(yè)網(wǎng)站設(shè)計(jì)公司。

先直接看代碼,再對(duì)代碼內(nèi)容進(jìn)行分析與學(xué)習(xí)。

首先要掌握的是類函數(shù)的定義格式,在普通函數(shù)的前面添加裝飾器 @classmethod ,該函數(shù)就會(huì)轉(zhuǎn)換為類函數(shù),同時(shí)函數(shù)的第一個(gè)參數(shù)默認(rèn)是 cls ,該變量名可以任意,建議使用成 cls ,這個(gè)是程序員之間的約定。

在 Python 中,大部分 @classmethod 裝飾的函數(shù)末尾都是 return cls(XXX) , return XXX.__new__ () 也就是 @classmethod 的一個(gè)主要用途是作為構(gòu)造函數(shù)。

先掌握一個(gè)概念,靜態(tài)函數(shù)不屬于它所在的那個(gè)類,它是獨(dú)立于類的一個(gè)單獨(dú)函數(shù),只是寄存在一個(gè)類名下,先建立這個(gè)基本概念,后面學(xué)起來(lái)就簡(jiǎn)單很多了。

在同一個(gè)類中,調(diào)用靜態(tài)方法,使用 類名.函數(shù)名() 的格式。

先創(chuàng)建一個(gè)父類,其中包含兩個(gè)靜態(tài)函數(shù)與一個(gè)類函數(shù)。

再編寫(xiě)一個(gè) S 類繼承自 F 類:

測(cè)試之后,基本結(jié)論如下:

如果在子類中覆蓋了父類的靜態(tài)函數(shù),那調(diào)用時(shí)使用的是子類自己的靜態(tài)函數(shù),

如果在子類中沒(méi)有覆蓋父類的靜態(tài)函數(shù),那調(diào)用時(shí)使用的是父類的靜態(tài)函數(shù),

類函數(shù)同樣遵循該規(guī)則。

如果希望在子類中調(diào)用父類的屬性或者函數(shù),請(qǐng)使用 父類名. 的形式實(shí)現(xiàn)。

被 @abstractmethod 裝飾的函數(shù)為抽象函數(shù),含抽象函數(shù)的類不能實(shí)例化,繼承了含抽象函數(shù)的子類必須覆蓋所有抽象函數(shù)裝飾的方法,未被裝飾的可以不重寫(xiě)。

抽象類是一個(gè)特殊的類,它的特殊之處在于只能被繼承,不能被實(shí)例化,實(shí)現(xiàn)代碼如下:

抽象基類中學(xué)習(xí)還需要了解元類相關(guān)知識(shí),在第三輪滾雪球?qū)W Python 中將為你展開(kāi)這部分內(nèi)容。

在 Python 面向?qū)ο蟮木幋a過(guò)程中, 對(duì)象.屬性 來(lái)獲取屬性的值,使用 對(duì)象.方法() 來(lái)調(diào)用方法,通過(guò)裝飾器 @property 可以將一個(gè)方法偽裝成屬性,從而使用 對(duì)象.方法 沒(méi)有括號(hào)的形式調(diào)用。代碼非常簡(jiǎn)單:

這種寫(xiě)法最直接的應(yīng)用,就是將部分屬性變成只讀屬性,例如,上述代碼,你無(wú)法通過(guò)下述代碼對(duì) name 進(jìn)行修改。

如果希望方法偽裝的屬性具備修改和刪除功能,需要參考下述代碼:

上述代碼在將 name 方法偽裝成屬性之后,可以通過(guò) @name.setter 和 @name.deleter 對(duì)同名的 name 方法進(jìn)行裝飾,從而實(shí)現(xiàn)了修改與刪除功能。

所以一般使用方法偽裝屬性的步驟是:

如果你覺(jué)得這個(gè)比較麻煩,還存在一種方法偽裝屬性的方式。使用 property 函數(shù),原型如下

通過(guò)上述函數(shù)將方法偽裝成屬性的代碼為:

滾雪球?qū)W Python 第二輪 15 篇博客在一次結(jié)束了,下一輪將在 4 月中旬再次開(kāi)啟,學(xué) Python 我們一直在路上,希望本系列的課程對(duì)你的 Python 學(xué)習(xí)有所助力。

抽象函數(shù) java

1、抽象類

當(dāng)想要通過(guò)共通接口來(lái)操作一組classes時(shí),便可撰寫(xiě)abstract class。子類中所有與“抽象類所聲明的標(biāo)記式”相符的函數(shù),都會(huì)通過(guò)動(dòng)態(tài)綁定的機(jī)制來(lái)調(diào)用。

有一組類他們擁有一系列相似的行為特征,它們擁有一些共同的函數(shù),我們就把這些共同特征抽取出來(lái)放到抽象類中,抽象類為所有的子類提供“共同的接口”。

建立抽象類的唯一理由是:

各子型別都可以以以不同方式來(lái)表現(xiàn)此一共同接口。達(dá)到多態(tài)性的目的。

注意點(diǎn):

* 抽象函數(shù)只能在抽象類中出現(xiàn)(即,一個(gè)普通的類中,不能聲明抽象函數(shù),一旦聲明,要將該class用abstract做飾詞,否則編譯出錯(cuò))

* 抽象類不能被實(shí)例化。否則編譯出錯(cuò)。

* 只有當(dāng)子類實(shí)現(xiàn)了抽象類中定義的所有函數(shù),該子類才可被實(shí)例化。否則,該子類便也是個(gè)抽象類。

* 也可以將一般的類(不含任何抽象函數(shù)的類)聲明為abstract。表明不允許該類產(chǎn)生任何實(shí)例。

2、接口

完全抽象的class,不帶半點(diǎn)實(shí)現(xiàn)內(nèi)容。interface相當(dāng)于是在類之間建立起的一個(gè)協(xié)議。

interface使得我們可以撰寫(xiě)出“可被向上轉(zhuǎn)型為多個(gè)基本型別”的class,達(dá)到C++多重繼承的變形。

注意點(diǎn):

* 默認(rèn)interface是friendly,可通過(guò)加上關(guān)鍵字public成為public。

* interface中定義的函數(shù)默認(rèn)是public的,因?yàn)樗峁┕餐涌?,需要可以被外界訪問(wèn)。為了增強(qiáng)程序可讀性,可顯式聲明為public。

* 當(dāng)實(shí)現(xiàn)某個(gè)interface,用關(guān)鍵字implement。

實(shí)現(xiàn)類中襲承自interface的函數(shù)必須都要定義為public。一定要顯式寫(xiě)明是public,默認(rèn)就變成friendly,減低了訪問(wèn)權(quán)限,這在Java編譯器中是不允許的。

3、區(qū)別和聯(lián)系

異:

* 抽象類用于支持多態(tài)性,接口用來(lái)支持“多繼承”變形—— 一個(gè)class可向上轉(zhuǎn)型為多個(gè)基本型別。

* 抽象類中函數(shù)既可是抽象的,也可是包含實(shí)現(xiàn)細(xì)節(jié)的。接口只能表示形式,其中函數(shù)必定都是抽象的。

* 抽象函數(shù)中可定義變量。接口只能定義 static/final 的成員變量。

同:

- 抽象類和接口都不能被實(shí)例化。

用Java語(yǔ)言編寫(xiě),要求申明三角形類,繼承圖形抽象類,計(jì)算三角形的周長(zhǎng)和面積!

圖形抽象類的代碼:

abstract class MyShape {

abstract int calGirth(); //求周長(zhǎng)

abstract double calSquare(); //求面積

}

三角形類的實(shí)現(xiàn):

public class Triangle extends MyShape{

int borderA, borderB, borderC;

Triangle(int a, int b, int c){borderA = a; borderB = b; borderC = c;}

Triangle(){borderA = borderB = borderC = 0;}

@Override

int calGirth() {

return borderA + borderB + borderC;

}

@Override

double calSquare() {

double p = calGirth() / 2;

return Math.sqrt(p * (p - borderA) * (p - borderB) * (p - borderC));

}

public static void main(String[] args) {

Triangle test = new Triangle(3, 4, 5);

System.out.println("The girth of the triangle is " + test.calGirth());

System.out.println("The square of the triangle is " + test.calSquare());

}

}

實(shí)現(xiàn)兩個(gè)抽象函數(shù),測(cè)試結(jié)果正確,輸出為:

The girth of the triangle is 12

The square of the triangle is 6.0

java定義一個(gè)抽象類Person 在其中定義一個(gè)抽象函數(shù)pay(),然后從Person 派生出若

Java程序:

//抽象人類

abstract?class?Person?{

//薪水

protected?double?salary;

public?Person()?{

this.salary?=?0;

}

public?Person(double?salary)?{

this.salary?=?salary;

}

//抽象方法

abstract?void?pay();

}

//工人類

class?Worker?extends?Person?{

public?Worker(double?salary)?{

super(salary);

}

@Override

void?pay()?{

System.out.println("工人工資:"?+?salary);

}

}

//程序員類

class?Programmer?extends?Person?{

public?Programmer(double?salary)?{

super(salary);

}

@Override

void?pay()?{

System.out.println("程序員工資:"?+?salary);

}

}

public?class?Main?{

public?static?void?main(String[]?args)?{

Person?p; //聲明抽象類對(duì)象

p?=?new?Worker(5000); //用子類實(shí)例化抽象類對(duì)象

p.pay(); //調(diào)用被實(shí)現(xiàn)的方法

p?=?new?Programmer(8000); //用子類實(shí)例化抽象類對(duì)象

p.pay(); //調(diào)用被實(shí)現(xiàn)的方法

}

}

運(yùn)行測(cè)試:

工人工資:5000.0

程序員工資:8000.0

JAVA編程題:編一個(gè)程序包含一個(gè)接口 shape(該接口中定義抽象函數(shù)calarea()), 一個(gè)圓類和一個(gè)長(zhǎng)方形類

//Shape.java

public interface Shape{

public double calarea();

}

//Rectangle.java

public class Rectangle implements Shape{

private double length;

private double high;

public Rectangle(double length,double high){

this.length = length;

this.high = high;

}

public double calarea(){

return length*high;

}

}

//Circle Circle.java

public class Circle implements Shape{

private double radius;

public double calarea(){

return Math.PI*radius*radius;

}

public Circle(double radius){

this.radius = radius;

}

}

//Test.java

public class Test{

public static void main(String []args){

Shape recShape = new Rectangle(2.7,4.8);

Shape cirShape = new Circle(5.0);

System.out.println(recShape.calarea());

System.out.println(cirShape.calarea());

}

}

直接手寫(xiě)的,辛苦吧

新聞名稱:java抽象函數(shù)代碼,JAVA抽象類和抽象方法
網(wǎng)站鏈接:http://jinyejixie.com/article36/dssidsg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制開(kāi)發(fā)品牌網(wǎng)站建設(shè)、微信小程序、ChatGPT、網(wǎng)站排名、App設(shè)計(jì)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

營(yíng)銷型網(wǎng)站建設(shè)
华容县| 垦利县| 威海市| 微山县| 正安县| 和林格尔县| 白沙| 桐庐县| 安阳县| 永善县| 乌什县| 锡林浩特市| 仁怀市| 剑阁县| 惠东县| 石城县| 朝阳市| 阳泉市| 班戈县| 化州市| 武夷山市| 孝感市| 崇信县| 郎溪县| 中卫市| 丰城市| 嘉峪关市| 毕节市| 中西区| 莱阳市| 荃湾区| 灵寿县| 迁西县| 崇义县| 大田县| 桐柏县| 鹿邑县| 拜城县| 榆中县| 从化市| 汤阴县|