欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java抽象類和接口的區(qū)別詳情

 更新時(shí)間:2021年11月25日 08:58:56   作者:海擁  
這篇文章主要介紹的是Java抽象類和接口的區(qū)別詳情,

1、抽象類 vs 接口?

  • 方法類型: 接口只能有抽象方法。抽象類可以有抽象和非抽象方法。從 Java 8 開(kāi)始,它也可以有默認(rèn)和靜態(tài)方法。
  • 最終變量: 在 Java 接口中聲明的變量默認(rèn)是最終的。抽象類可能包含非最終變量。
  • 變量類型: 抽象類可以有final、non-final、靜態(tài)和非靜態(tài)變量。接口只有靜態(tài)和最終變量。
  • 實(shí)現(xiàn): 抽象類可以提供接口的實(shí)現(xiàn)。接口不能提供抽象類的實(shí)現(xiàn)。
  • 繼承 vs 抽象:? Java 接口可以使用關(guān)鍵字“implements”來(lái)實(shí)現(xiàn),抽象類可以使用關(guān)鍵字“extends”進(jìn)行擴(kuò)展。
  • 多重實(shí)現(xiàn): 一個(gè)接口只能擴(kuò)展另一個(gè)Java接口,一個(gè)抽象類可以擴(kuò)展另一個(gè)Java類并實(shí)現(xiàn)多個(gè)Java接口。
  • 數(shù)據(jù)成員的可訪問(wèn)性: 默認(rèn)情況下,Java 接口的成員是公共的。Java 抽象類可以具有私有、受保護(hù)等類成員。

import java.io.*;

abstract class Shape {

	String objectName = " ";

	Shape(String name) { this.objectName = name; 

        }

	public void moveTo(int x, int y){

		System.out.println(this.objectName + " "

						+ "已移至"

						+ " x = " + x + " and y = " + y);

	}

	abstract public double area();

	abstract public void draw();

}



class Rectangle extends Shape {

	int length, width;

	Rectangle(int length, int width, String name){

		super(name);

		this.length = length;

		this.width = width;

	}

	@Override public void draw(){

		System.out.println("矩形已繪制");

	}

	@Override public double area(){

		return (double)(length * width);

	}

}



class Circle extends Shape {

	double pi = 3.14;

	int radius;

	Circle(int radius, String name){

		super(name);

		this.radius = radius;

	}

	@Override public void draw(){

		System.out.println("圓形已繪制");

	}

	@Override public double area(){

		return (double)((pi * radius * radius) / 2);

	}

}



class HY {

	public static void main(String[] args){

		Shape rect = new Rectangle(2, 3, "Rectangle");

		System.out.println("矩形面積:"

						+ rect.area());

		rect.moveTo(1, 2);

		System.out.println(" ");

		Shape circle = new Circle(2, "Circle");

		System.out.println("圓的面積:"

						+ circle.area());

		circle.moveTo(2, 4);

	}

}

輸出:

矩形面積:6.0

矩形已移至 x = 1 和 y = 2

圓的面積:6.28

圓已移至 x = 2 和 y = 4

如果我們?cè)诰匦魏蛨A形之間沒(méi)有任何通用代碼,請(qǐng)使用界面。

import java.io.*;

interface Shape {

	void draw();

	double area();

}

class Rectangle implements Shape {

	int length, width;

	Rectangle(int length, int width){

		this.length = length;

		this.width = width;

	}

	@Override public void draw(){

		System.out.println("矩形已繪制");

	}

	@Override public double area(){

		return (double)(length * width);

	}

}

class Circle implements Shape {

	double pi = 3.14;

	int radius;

	Circle(int radius) { this.radius = radius; }



	@Override public void draw(){

		System.out.println("圓形已繪制");

	}



	@Override public double area(){

		return (double)((pi * radius * radius) / 2);

	}

}

class HY {

	public static void main(String[] args){

		Shape rect = new Rectangle(2, 3);

		System.out.println("矩形面積:"

						+ rect.area());

		Shape circle = new Circle(2);

		System.out.println("圓的面積:"

						+ circle.area());

	}

}

輸出:

矩形面積:6.0

圓的面積:6.28

什么時(shí)候用什么?

如果以下任何陳述適用于您的情況,請(qǐng)考慮使用抽象類:??

  • java應(yīng)用程序中,有一些相關(guān)的類需要共享一些代碼行,那么你可以將這些代碼行放在抽象類中,并且這個(gè)抽象類應(yīng)該由所有這些相關(guān)類進(jìn)行擴(kuò)展。
  • 您可以在抽象類中定義非靜態(tài)或非最終字段,以便您可以通過(guò)方法訪問(wèn)和修改它們所屬的對(duì)象的狀態(tài)。
  • 您可以期望擴(kuò)展抽象類的類具有許多公共方法或字段,或者需要除 public 之外的訪問(wèn)修飾符(例如 protected private)。

如果以下任何陳述適用于您的情況,請(qǐng)考慮使用接口:??

  • 它是一個(gè)完全的抽象,接口中聲明的所有方法都必須由實(shí)現(xiàn)此接口的類來(lái)實(shí)現(xiàn)。
  • 一個(gè)類可以實(shí)現(xiàn)多個(gè)接口。它被稱為多重繼承。
  • 您想指定特定數(shù)據(jù)類型的行為,但不關(guān)心誰(shuí)實(shí)現(xiàn)其行為。

到此這篇關(guān)于Java抽象類和接口的區(qū)別詳情的文章就介紹到這了,更多相關(guān)Java抽象類和接口的區(qū)別內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java 判斷一個(gè)數(shù)是否為2的整數(shù)次冪方法

    java 判斷一個(gè)數(shù)是否為2的整數(shù)次冪方法

    今天小編就為大家分享一篇java 判斷一個(gè)數(shù)是否為2的整數(shù)次冪方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-07-07
  • Mybatis查詢方法如何實(shí)現(xiàn)沒(méi)有返回值

    Mybatis查詢方法如何實(shí)現(xiàn)沒(méi)有返回值

    這篇文章主要介紹了Mybatis查詢方法如何實(shí)現(xiàn)沒(méi)有返回值,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-10-10
  • java解析XML詳解

    java解析XML詳解

    這篇文章主要介紹了XML解析四種方式代碼示例詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2021-07-07
  • Java8中的類型注解淺析

    Java8中的類型注解淺析

    這篇文章主要介紹了Java8中的類型注解淺析,java8之前,注解只能是在聲明的地方所使用,java8里面的注解則可以應(yīng)用在任何地方,需要的朋友可以參考下
    2014-06-06
  • Netty的Handler鏈調(diào)用機(jī)制及如何組織詳解

    Netty的Handler鏈調(diào)用機(jī)制及如何組織詳解

    這篇文章主要為大家介紹了Netty的Handler鏈調(diào)用機(jī)制及如何組織示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-03-03
  • 修改idea的這些啟動(dòng)參數(shù),令你的idea健步如飛

    修改idea的這些啟動(dòng)參數(shù),令你的idea健步如飛

    這篇文章主要介紹了修改idea的這些啟動(dòng)參數(shù),令你的idea健步如飛~具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-01-01
  • spring中的ObjectPostProcessor詳解

    spring中的ObjectPostProcessor詳解

    這篇文章主要介紹了spring中的ObjectPostProcessor詳解,Spring Security 的 Java 配置不會(huì)公開(kāi)其配置的每個(gè)對(duì)象的每個(gè)屬性,這簡(jiǎn)化了大多數(shù)用戶的配置,畢竟,如果每個(gè)屬性都公開(kāi),用戶可以使用標(biāo)準(zhǔn) bean 配置,需要的朋友可以參考下
    2024-01-01
  • Spring Cloud Ribbon的踩坑記錄與原理詳析

    Spring Cloud Ribbon的踩坑記錄與原理詳析

    這篇文章主要給大家介紹了關(guān)于Spring Cloud Ribbon踩坑記錄與原理的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2018-10-10
  • Spring?Boot?MQTT?Too?many?publishes?in?progress錯(cuò)誤的解決方案

    Spring?Boot?MQTT?Too?many?publishes?in?progress錯(cuò)誤的解決方

    本文介紹Spring?Boot?MQTT?Too?many?publishes?in?progress錯(cuò)誤的解決方案,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,感興趣的小伙伴可以參考一下
    2022-07-07
  • 詳解spring cloud分布式關(guān)于熔斷器

    詳解spring cloud分布式關(guān)于熔斷器

    這篇文章主要介紹了詳解spring cloud分布式關(guān)于熔斷器,詳細(xì)的介紹了什么是熔斷器和使用,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-08-08

最新評(píng)論