Java 中抽象類與接口

Java 抽象類: 在面向對象的概念中,所有的對象都是通過類來描繪的,但是反過來,并不是所有的類都是用來描繪對象的,如果一個類中沒有包含足夠的信息來描繪一個具體的對象,這個類就是抽象類。

  • 抽象類不能創建實例,只能當成父類來被繼承。
  • 抽象類必須使用abstract 修飾符來修飾,抽象方法也必須使用abstract 修飾符來修飾,抽象方法不能有方法體。
  • 抽象類不能被實例化,無法使用new 關鍵字來調用抽象類的構造器創建抽象類的實例。
  • 抽象類可以包含成員變量,方法(普通方法和抽象方法都可以),構造器,初始化塊,內部類(接口,枚舉)5種成分。抽象類的構造器可以不能用于創建實例,主要是用于被子類調用。
  • 含有抽象方法的類只能被定義成抽象類。抽象類中不一定包含抽象方法,但是有抽象方法的類必定是抽象類
  • abstract 與static 不能同時修飾一個方法。

[ 修飾符 ] abstract 返回類型 方法名();
修飾符( public protected private) 三選一
如下示例 先定義一個Animal 方法:

public abstract class Animal {{System.out.println("執行 Animal 的初始化塊...");}//成員變量private String color;//定義跑的抽象方法 //抽象方法沒有方法體public abstract void running();//定義一個普通方法 休息public void sleep(){System.out.println("休息");}	// 定義Animal的構造器,該構造器并不是用于創建Animal對象而是用來被子類調用public Animal(){		}	public Animal(String color){System.out.println("執行 Animal的構造器");this.color = color;}	public String getColor(){return color;}public void setColor(String color){this.color = color;}
}

再寫一個Tiger 方法繼承Animal :

public class Tiger extends Animal{//實現抽象類@Overridepublic void running(){// TODO Auto-generated method stubSystem.out.println("老虎呀老虎");}
}
public static void main(String[] args) {Animal animal = new Tiger();animal.running();animal.sleep();
}

輸出結果為:
在這里插入圖片描述
接口: 在Java 編程語言中是一個抽象類型,是抽象方法的集合,接口通常以interface 來聲明。一個類通過繼承接口的方式,從而來繼承接口的抽象方法。

  • 接口并不是類,編寫接口的方式和類很相似,但是它們屬于不同的概念。類描述對象的屬性和方法。接口則包含類要實現的方法。
  • 接口沒有main方法,不能直接運行。
  • 除非實現接口的類是抽象類,否則該類要定義接口中的所有方法。
  • 接口無法被實例化,但是可以被實現,一個實現接口的類,必須實現接口內所描述的所有方法,否則就必須聲明為抽象類。
  • 在Java 中,接口類型可以用來聲明一個變量,它們可以成為一個空指針,或者被綁定在一個以此接口實現的對象。

接口特性:

  1. 接口方法的默認修飾符是public,你不可以使用其他修飾符,接口不能有構造器。
  2. 接口是隱式抽象的,當聲明一個接口的時候,不必使用abstract 關鍵字。
  3. 接口中每一個方法也是隱式抽象的,聲明時同樣不需要abstract 關鍵字。
  4. 接口中的方法都是公有的。
  5. 編譯時自動為接口里定義的方法添加 public abstract 修飾符。
  6. Java 接口里的成員變量只能是 public static final 共同修飾的,并且必須賦初值,可以不寫 public static final ,編譯的時候會自動添加。

如下所示:

	public interface InterfaceOne {// 系統自動為接口里定義的成員變量增加public static final修飾符int STATUE = 1;public static final int DISSTATUE =1;		//系統自動為接口里定義的方法添加 public abstract 修飾符void sleep();	public abstract void running();}	

接口實現:
當類實現接口的時候,類要實現接口中所有的方法。否則,類必須聲明為抽象的類。 類使用implements關鍵字實現接口。在類聲明中,Implements關鍵字放在class聲明后面。
Java中類可以實現多個接口:

public class Demo implements InterfaceOne,InterfaceTwo{//Demo是InterfaceOne和InterfaceTwo 的實現類public static void main(String[] args) {Demo demo  = new Demo();demo.eatting();demo.running();demo.sleep();		}	@Overridepublic void sleep() {// TODO Auto-generated method stubSystem.out.println("休息");}@Overridepublic void running() {// TODO Auto-generated method stubSystem.out.println("跑");}@Overridepublic void eatting() {// TODO Auto-generated method stubSystem.out.println("吃");}
}

在Demo 中實現了InterfaceOne和InterfaceTwo接口:
在這里插入圖片描述
接口的繼承:

  • 接口可以有多個直接父接口,但接口只能繼承接口,不能繼承類。
  • 一個接口能繼承另一個接口,和類之間的繼承方式比較相似。接口的繼承使用extends 關鍵字。子接口繼承父接口的方法。接口允許多繼承。

[修飾符] interface 接口名 extends InterfaceOne,InterfaceTwo
{
//零到多個靜態常量定義…
//零到多個抽象方法定義…
}
修飾符 public abstract

抽象類和接口的對比:
在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/443383.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/443383.shtml
英文地址,請注明出處:http://en.pswp.cn/news/443383.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Java 中的進程與線程的實現

了解進程與線程: 進程: 當一個程序進入內存運行時,即變成一個進程。進程是處于運行過程 中的程序,并且具有一定的獨立功能,進程是系統進行資源分配和調度的一個獨立單 位一般而言,進程包含如下三個特征&…

Java集合工具類:Collections

Java提供了一個操作Set、List和Map等集合的工具類:Collections,該工具類里 提供了大量方法對集合元素進行排序、查詢和修改等操作,還提供了對集合對象實現同步控制等方法。 一、 排序操作 如下示例: public class CollectionsSor…

Java異常處理throws/throw

Java的異常被分為兩大類:Checked異常和Runtime異常(運行時異常)。 ? Runtime異常:所有的RuntimeException類及其子類的實例; ? Checked異常:不是RuntimeException類及其子類的異常實例。 只有Java語言提供…

JDBC 連接MYSQL數據庫

1. 加載驅動 Class.forName("com.mysql.jdbc.Driver");com.mysql.jdbc 包名 Driver 驅動名,驅動包需要引入進來 mysql com.mysql.jdbc.Driveroracle oracle.jdbc.driver.OracleDriversqlserver com.microsoft.sqlserver.jdbc.SQLServerDriver …

JSP 之輸出九九乘法表

JSP是一種建立在Servlet規范提供的功能之上的動態網頁技術,允許在網頁文件中嵌入java代碼和jsp標記。Java 服務器頁面 (Java Server Page ,JSP) 擴展名為 .jsp。 1.jsp的執行過程 Jsp文件在用戶第一次請求時,會被編譯成Servlet,然后由這個Se…

Java 重寫與重載

方法的重寫: 重寫是子類對父類的允許訪問的方法的實現過程進行重新編寫, 返回值和形參都不能改變。 重寫的好處在于子類可以根據需要,定義特定于自己的行為。 也就是說子類能夠根據需要實現父類的方法。 重寫方法不能拋出新的檢查異常或者比被重寫方法申…

Java新增

在實踐項目中我們有可能需要做到新增功能,新增一張表,或是新增多張表。這里我新增的是一張表。 這里主要描述DAO層與Servlet 層: DAO 層: public class UserDaoImpl implements UserDao {private Connection con null;private P…

JSP根據狀態動態改變數據表格按鈕

有時候在開發的過程中會遇到需要根據狀態ID 來動態改變數據表格的按鈕&#xff0c;下面我主要講述兩種表格根據ID改變按鈕的方式。 下面這種我是用EL 表達式獲取表格中的值&#xff1a; <table class"table table-striped table-bordered table-hover" id"s…

Java 模糊查詢

在學習Java 這門語言過程中&#xff0c;會遇到無數的知識點與錯誤&#xff0c;最重要的是我們能夠在茫茫的代碼中找到突破口&#xff0c;并用心去汲取精華。 在很多時候我們會用到模糊查詢&#xff0c;這里是我在編碼過程中用到的模糊查詢。 JSP &#xff1a; <input value…

Java刪除表

Java刪除表 這里頁面我用了layui 框架做刪除的&#xff0c;這里需要引入layui 的css 與js 插件&#xff0c;這里寫出主要的代碼。 Jsp &#xff1a; //監聽行工具事件table.on(tool(test), function(obj){var data obj.data; //獲得當前行數據var date1 data.classifyColum…

原始分頁

Jsp &#xff1a; <div style"float: right;">當前為${currentPage}頁&#xff0c;共有${totalRow}條數據&#xff0c;共${totalPage}頁 <select style"border-radius: 18px;" id"pageSize" name"pageSize" onchange"c…

根據銀行卡號判斷銀行卡是否正確與歸屬銀行

校驗過程&#xff1a; 1.從卡號的最后一位數字開始&#xff0c;逆向將奇數位&#xff08;1&#xff0c;3&#xff0c;5 等等相加&#xff09; 2.從卡號最后一位數字開始&#xff0c;逆向將偶數位數字&#xff0c;先乘以2&#xff0c;如果乘積為兩位數&#xff0c;將個位數字相加…

根據年月日判斷第多少天,星期幾

1. 根據年月日判斷第多少天 Scanner是SDK1.5新增的一個類,可使用該類創建一個對象。 Scanner scannernew Scanner(System.in);  然后scanner對象調用下列方法&#xff08;函數&#xff09;,讀取用戶在命令行輸入的各種數據類型   next.Byte(),nextDouble(),nextFloat,nextIn…

解決MySQLyog 導入數據庫文件沒有反應

之前我在MySQL 中新建了一個數據庫&#xff0c;名為“onlineclassroom” 的數據庫&#xff0c;但是在將外部的.sql 文件導入進來之后發現&#xff0c;數據庫沒有反應&#xff0c;也看不到表數據&#xff0c;以為是沒有刷新問題&#xff0c;但是刷新之后發現還是沒有這個就很奇怪…

解決myeclipse報錯500,MySQLyog報錯誤碼問題

在myeclipse 寫了一個登錄&#xff0c;但在我登錄的時候卻報了500的空指針&#xff0c;我檢查了自己的登錄代碼&#xff0c;發現沒有問題&#xff0c;這不應該啊&#xff0c;然后在網上也尋找了一些解決方案&#xff0c;發現好像并不適用&#xff0c;500空指針如下&#xff1a;…

Java防止用戶同一時間重復登錄(包括異地登錄)

有時候我們在做登錄模塊過程中難免會遇到這種問題&#xff0c;即使我們給用戶進行了多重判斷&#xff0c;比如&#xff1a;用戶名&#xff0c;管理員&#xff0c;驗證碼&#xff0c;一系列的判斷… 你是否真正考慮到用戶的體驗&#xff0c;比如不能讓用戶在同一時間&#xff0c…

jquery點擊彈出播放視頻并顯示遮罩層

最近在做視頻播放的時候&#xff0c;發現用jquery的播放視頻可以很好的實現我所需要的效果。在之前請把插件引用進來&#xff0c;廢話不多說&#xff0c;代碼如下&#xff1a; <!DOCTYPE html> <html><head><meta charset"utf-8"><meta …

JS實現圖片循環滾動

之前在前端的時候有遇到這樣一個問題&#xff0c;實現 JS 圖片的循環滾動&#xff0c;然后鼠標移入的時候停止滾動&#xff0c;鼠標移開繼續滾動&#xff0c;這里無非就是設置了一個定時器&#xff0c;鼠標移上時清除定時器達到滾動停止的目的&#xff0c;鼠標移開時重設定時器…

有趣的滾動條

今天在搭前端頁面的時候&#xff0c;UI給過來的一個自定義的滾動條&#xff0c;要求必須與設計的一樣&#xff0c;覺得有點有趣&#xff0c;現在記錄一下。 效果圖&#xff1a; 具體代碼是這樣的&#xff1a; /*字體太長&#xff0c;這里我就減少一些*/ <div class"l…

查詢分頁的幾種sql語句

sql server 中的分頁查詢sql語句不跟mysql 一樣&#xff0c;mysql 用 limit 可以實現查詢sql分頁。如&#xff1a; select * from news where id>(select id from news limit 250000,1) limit 10; //相對執行效率高 select * from news limit 250000,10;mysql 中 limit總是…