黄色网址大全免费-黄色网址你懂得-黄色网址你懂的-黄色网址有那些-免费超爽视频-免费大片黄国产在线观看

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節(jié)點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 學習攻略 Java學習 Java抽象類和接口的區(qū)別

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

更新時間:2022-08-03 10:50:40 來源:動力節(jié)點 瀏覽1794次

Java抽象類和接口的區(qū)別是什么?動力節(jié)點小編來告訴大家。眾所周知,抽象是指隱藏功能的內(nèi)部實現(xiàn),只向用戶顯示功能。即它的工作原理(顯示),它是如何工作的(隱藏)。抽象類和接口都用于抽象,因此接口和抽象類是必需的先決條件。

抽象類與接口

方法類型:接口只能有抽象方法。抽象類可以有抽象方法和非抽象方法。從 Java 8 開始,它也可以有默認和靜態(tài)方法。

最終變量: Java 接口中聲明的變量默認為最終變量。抽象類可能包含非最終變量。

變量類型:抽象類可以有最終、非最終、靜態(tài)和非靜態(tài)變量。該接口只有靜態(tài)和最終變量。

實現(xiàn):抽象類可以提供接口的實現(xiàn)。接口不能提供抽象類的實現(xiàn)。

繼承與抽象: Java 接口可以使用關(guān)鍵字“implements”來實現(xiàn),抽象類可以使用關(guān)鍵字“extends”進行擴展。

多種實現(xiàn):一個接口可以擴展一個或多個Java接口,一個抽象類可以擴展另一個Java類并實現(xiàn)多個Java接口。

數(shù)據(jù)成員的可訪問性:默認情況下,Java 接口的成員是公共的。Java 抽象類可以具有私有、受保護等類成員。

示例 1-A:

// Java Program to Illustrate Concept of
// Abstract Class 
// Importing required classes
import java.io.*; 
// Class 1
// Helper abstract class
abstract class Shape { 
    // Declare fields
    String objectName = " "; 
    // Constructor of this class
    Shape(String name) { this.objectName = name; } 
    // Method
    // Non-abstract methods
    // Having as default implementation
    public void moveTo(int x, int y)
    {
        System.out.println(this.objectName + " "
                           + "has been moved to"
                           + " x = " + x + " and y = " + y);
    } 
    // Method 2
    // Abstract methods which will be
    // implemented by its subclass(es)
    abstract public double area();
    abstract public void draw();
} 
// Class 2
// Helper class extending Class 1
class Rectangle extends Shape { 
    // Attributes of rectangle
    int length, width; 
    // Constructor
    Rectangle(int length, int width, String name)
    { 
        // Super keyword refers to current instance itself
        super(name); 
        // this keyword refers to current instance itself
        this.length = length;
        this.width = width;
    } 
    // Method 1
    // To draw rectangle
    @Override public void draw()
    {
        System.out.println("Rectangle has been drawn ");
    } 
    // Method 2
    // To compute rectangle area
    @Override public double area()
    {
        // Length * Breadth
        return (double)(length * width);
    }
} 
// Class 3
// Helper class extending Class 1
class Circle extends Shape {
    // Attributes of a Circle
    double pi = 3.14;
    int radius; 
    // Constructor
    Circle(int radius, String name)
    {
        // Super keyword refers to parent class
        super(name);
        // This keyword refers to current instance itself
        this.radius = radius;
    } 
    // Method 1
    // To draw circle
    @Override public void draw()
    {
        // Print statement
        System.out.println("Circle has been drawn ");
    } 
    // Method 2
    // To compute circle area
    @Override public double area()
    {
        return (double)((pi * radius * radius));
    }
} 
// Class 4
// Main class
class GFG { 
    // Main driver method
    public static void main(String[] args)
    {
        // Creating the Object of Rectangle class
        // and using shape class reference.
        Shape rect = new Rectangle(2, 3, "Rectangle"); 
        System.out.println("Area of rectangle: "
                           + rect.area()); 
        rect.moveTo(1, 2); 
        System.out.println(" "); 
        // Creating the Objects of circle class
        Shape circle = new Circle(2, "Circle"); 
        System.out.println("Area of circle: "
                           + circle.area()); 
        circle.moveTo(2, 4);
    }
}

輸出

矩形面積:6.0
矩形已移至 x = 1 和 y = 2
圓形面積:12.56
圓圈已移至 x = 2 和 y = 4

如果我們在矩形和圓形之間沒有任何共同的代碼怎么辦,然后使用界面。

示例 1-B:

// Java Program to Illustrate Concept of Interface
// Importing I/O classes
import java.io.*;
// Interface
interface Shape {
	// Abstract method
	void draw();
	double area();
}
// Class 1
// Helper class
class Rectangle implements Shape {
	int length, width;
	// constructor
	Rectangle(int length, int width)
	{
		this.length = length;
		this.width = width;
	}
	@Override public void draw()
	{
		System.out.println("Rectangle has been drawn ");
	}
	@Override public double area()
	{
		return (double)(length * width);
	}
}
// Class 2
// Helper class
class Circle implements Shape {
	double pi = 3.14;
	int radius;
	// constructor
	Circle(int radius) { this.radius = radius; }
	@Override public void draw()
	{
		System.out.println("Circle has been drawn ");
	}
	@Override public double area()
	{
		return (double)((pi * radius * radius));
	}
}
// Class 3
// Main class
class GFG {
	// Main driver method
	public static void main(String[] args)
	{
		// Creating the Object of Rectangle class
		// and using shape interface reference.
		Shape rect = new Rectangle(2, 3);
		System.out.println("Area of rectangle: "
						+ rect.area());
		// Creating the Objects of circle class
		Shape circle = new Circle(2);
		System.out.println("Area of circle: "
						+ circle.area());
	}
}

輸出

矩形面積:6.0
圓形面積:12.56

什么時候用什么?

如果這些陳述中的任何一個適用于您的情況,請考慮使用抽象類:

在java應(yīng)用程序中,有一些相關(guān)的類需要共享一些代碼行,那么您可以將這些代碼行放在抽象類中,這個抽象類應(yīng)該由所有這些相關(guān)類擴展。

您可以在抽象類中定義非靜態(tài)或非最終字段,以便通過方法訪問和修改它們所屬對象的狀態(tài)。

您可以期望擴展抽象類的類具有許多公共方法或字段,或者需要公共以外的訪問修飾符(例如受保護和私有)。

如果這些陳述中的任何一個適用于您的情況,請考慮使用接口:

它是完全抽象的,接口中聲明的所有方法都必須由實現(xiàn)該接口的類來實現(xiàn)。

一個類可以實現(xiàn)多個Java接口。它被稱為多重繼承。

您想指定特定數(shù)據(jù)類型的行為,但不關(guān)心誰實現(xiàn)了它的行為。

提交申請后,顧問老師會電話與您溝通安排學習

免費課程推薦 >>
技術(shù)文檔推薦 >>
主站蜘蛛池模板: 99九九99九九九视频精品 | ppypp日本欧美一区二区 | 国产91免费 | 亚洲欧美在线观看首页 | 永久视频网站 | 视频免费1区二区三区 | jizzjizz日本老师水放 | 男人操女人免费网站 | 欧美日韩一区二区视频图片 | 日韩高清成人毛片不卡 | 日本一区二区三区免费高清在线 | 未成人禁止视频高清在线观看 | 成人在线观看国产 | 羞羞网站免费 | 在线看无码的免费网站 | 性欧美xxxx视频在线观看 | 亚洲欧美在线播放 | 日批网站在线观看 | 久久综合九色综合97小说 | 香港三级日本三级三级人妇99 | 羞羞视频在线免费观看 | 国产不卡在线蜜 | 国产成人禁片免费观看视频 | 国产高清黄色 | 国产精品边做边接电话在线观看 | 一级毛片一级毛片一级毛片aa | 国产精品h片在线播放 | 天天爱添天天爱添天天爱添 | 成人黄色一级片 | 国产成人精品日本亚洲语音2 | 久久精品国产欧美日韩亚洲 | 国产日韩欧美swag在线观看 | 丝袜美女在线观看 | 日韩视频亚洲 | 欧美超强性xxxxx | 国产精品久久久久无毒 | 日韩欧美在线观看视频 | 黄色免费的网站 | 夜夜做日日做夜夜爽 | 曰皮在线播放免费 | 国产精品视频区 |