Java中抽象類和接口介紹
1、抽象類
1.1 什么是抽象類?
1.1.1 對抽象類的理解

1.1.2 關于抽象類
類與類之間具有共同特征,將這些共同特征提取出來,形成的就是抽象類;
類本身是不存在的,屬于抽象類無法創(chuàng)建對象【無法實例化】;
抽象類是用來被子類繼承的;
finial關鍵字和abstract關鍵字不能同時出現(xiàn);
抽象類的子類可以是抽象類;
抽象類雖然無法實例化,但有構造方法,這個構造方法是供子類使用的;
接口一般描述的是行為動作信息
一個非抽象的類繼承抽象類,必須把抽象類中的抽象方法給實現(xiàn)(覆蓋、重寫)了
public class HelloWorld{
public static void main(String[] args){
//如何實現(xiàn)多態(tài)呢???
Animal a = new Bird();//向上轉型(自動類型轉換)
//面對抽象對象編程,降低程序的耦合度,提供程序的擴展力,符合OCP原則
}
}
abstract class Animal{
public abstract void move();
}
class Bird extends Animal{
public void move(){
}//Bird不是抽象類,必須實現(xiàn)父類的抽象方法
}//如果Bird是抽象類的話,那么繼承過來的抽象方法可以不去重寫、覆蓋、實現(xiàn)1.2 抽象類屬于什么類型?
抽象類也屬于引用數(shù)據(jù)類型;
1.3 抽象類怎么定義?
[修飾符列表] abstract class 類名{
類體;
}
1.4 抽象方法
1)抽象方法表示沒有實現(xiàn)的方法,沒有方法體,以分號結尾的方法。例如:
public abstract void doSome();
2)抽象類中不一定有抽象方法,但抽象方法一定在抽象類當中;
3)沒有方法體的方法不一定都是抽象方法,Object類中就有很多方法都沒有方法體,以" ;"結尾 e.g.:public native int hashCode();這個方法底層調用了C++寫的動態(tài)鏈接庫程序;前面修飾符列表中有native,表示調用JVM本地程序
2、接口
2.1 關于接口
1)接口也是一直引用數(shù)據(jù)類型,
2)接口的完全抽象的(抽象類是半抽象類)或者也可以說接口是特殊的抽象類;
3)接口支持接口繼承也支持接口多繼承;
interface A{
}
interface B{
}
interface C extends A,B{
}4)接口中只包含兩部分內容,一部分是常量,另一部分是抽象方法,所有內容都是public修飾的,都是公開的;
5)接口中抽象方法中的public static 可以省略,"public abstract int sun(int a,int b);" ——> "int sun(int a,int b);"
6)接口中變量中的public static final 可以省略,"public static final double PI = 3.1415926;" —> "double PI = 3.1415926;;"
7)接口中的方法都是抽象方法,所以接口中的方法都沒有方法體;
2.2 接口怎么定義?
[修飾符列表] interface 接口名{
}
2.3 接口基礎語法
1)類和類之間叫做繼承,類和接口之間叫做實現(xiàn)(可看作繼承),用關鍵字"implements";
2)當一個非抽象的類實現(xiàn)接口的話,必須將接口中所有的抽象方法全部實現(xiàn)(覆蓋、重寫);
public class interface {
public static void main(String[] args) {
//如何實現(xiàn)多態(tài)???
//父類型的引用指向子類型的對象
MyMath m = new MyMathImp();
//調用接口里面的方法(面向接口編程)
int result = m.sum(10,2);
System.out.println(result);
}
}
interface MyMath{
double PI = 3.1415926;
int sum(int a,int b);
int sub(int a,int b);
}
class MyMathImp implements MyMath{
public int sum(int a,int b){//重寫接口中的抽象方法
return a + b;
}
public int sub(int a,int b){//重寫接口中的抽象方法
return a - b;
}
}注意:非抽象的類實現(xiàn)接口時重寫的抽象方法public不可??;
3)一個類可以實現(xiàn)多個接口,這種機制彌補了"java中類和類只支持單繼承"帶來的缺陷;
接口和接口之間在進行強制類型轉換的時候,沒有繼承關系,也可以強轉,但運行的時候可能會出現(xiàn)ClassCastException異常,需要加instanceof進行判斷;
public class HelloWorld{
public static void main(String[] args) {
//如何實現(xiàn)多態(tài)???
A a = new C();
if(a instanceof B){
B b2 = (B)a;//此時a b的底層都是C,C實現(xiàn)了接口A和接口B,所以可以向下轉型
b2.m2();
}
M m = new E();
if(m instanceof K){
K k = (K)m;//這里的E()和K沒有關系,E實現(xiàn)了M,但沒有實現(xiàn)接口K,所以不能向下轉型
k.m3();
}
}
}
interface A{
void m1();
}
interface B{
void m2();
}
class C implements A,B{//C實現(xiàn)了A和B
public void m1(){
?
}
public void m2(){
System.out.println("可以向下轉型!");
}
}
?
interface K{
void m3();
}
interface M{
void m4();
}
class E implements M{//E實習了M,但沒有實現(xiàn)K
public void m3(){
}
public void m4(){
}
?4)繼承和實現(xiàn)都存在的話,代碼怎么寫?
extends關鍵字在前,implements關鍵字在后
public class interface{
public static void main(String args[]){
//創(chuàng)建對象
Flyable f = new Cat();
f.fly();
}
}
//動物類:父類
class Animal{
}
//可飛翔的接口(是一對翅膀)
//能插拔的就是接口。
//接口提取的是行為動作
interface Flyable{
void fly();
}
//動物類子類:貓
//Flyable是一個接口,是一個翅膀的接口,通過接口插到貓身上,讓貓可以飛翔
class Cat extends Animal implements Flyable{
public void fly(){
System.out.println("貓會飛");
}
}總結
到此這篇關于Java中抽象類和接口介紹的文章就介紹到這了,更多相關Java抽象類和接口內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Spring Data JPA結合Mybatis進行分頁查詢的實現(xiàn)
本文主要介紹了Spring Data JPA結合Mybatis進行分頁查詢的實現(xiàn)2024-03-03
spring?boot如何通過自定義注解和AOP攔截指定的請求
這篇文章主要介紹了spring?boot通過自定義注解和AOP攔截指定的請求,本文主要通過切面類和自定注解的方式,攔截指定的接口(代碼中已經(jīng)作了詳細的說明),需要的朋友可以參考下2024-06-06
Spring中@Transactional(rollbackFor=Exception.class)屬性用法介紹
這篇文章介紹了Spring中@Transactional(rollbackFor=Exception.class)屬性的用法,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2021-12-12
Java連接MySQL數(shù)據(jù)庫命令行程序過程
SQL編程包括兩種形式,一種是過程化編程,主要通過數(shù)據(jù)庫交互式工具,通過存儲過程、觸發(fā)器、函數(shù)等形式的編程;另一種是嵌入式SQL編程,將SQL語句嵌入到高級開發(fā)語言,完成數(shù)據(jù)的各種操作2021-10-10
IKAnalyzer使用不同版本中文分詞的切詞方式實現(xiàn)相同功能效果
今天小編就為大家分享一篇關于IKAnalyzer使用不同版本中文分詞的切詞方式實現(xiàn)相同功能效果,小編覺得內容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2018-12-12
JAVA實現(xiàn)連接本地打印機并打印文件的實現(xiàn)代碼
這篇文章主要介紹了JAVA實現(xiàn)連接本地打印機并打印文件的實現(xiàn)代碼,需要的朋友可以參考下2019-10-10

