摘要:抽象類和接口抽象類抽象方法是只有方法簽名,沒有方法實現的方法。抽象類不能被實例化,抽象類可以包含方法抽象和普通成員變量構造器初始化塊內部類接口枚舉種成分。抽象類的構造器不能用于創建實例,主要用于被其子類調用。
抽象類和接口 1.抽象類
抽象方法是只有方法簽名,沒有方法實現的方法。有抽象方法的類只能被定義成抽象類,抽象類可以沒有抽象方法。抽象方法和抽象類必須使用abstract修飾符來定義。
抽象類不能被實例化,抽象類可以包含方法(抽象和普通)、成員變量、構造器、初始化塊、內部類(接口、枚舉)5種成分。抽象類的構造器不能用于創建實例,主要用于被其子類調用。
public abstract class Shape { { System.out.println("執行Shape的初始化塊"); } private String color; public abstract double calPerimeter(); public abstract String getType(); public Shape() { } public Shape(String color) { System.out.println("執行Shape的構造器"); this.color = color; } set,get..... } ----------------------------------------------------------------------------- public class Triangle extends Shape { public static void main(String[] args) { Shape triangle = new Triangle("red", 1, 2, 2); System.out.println(triangle.calPerimeter()); System.out.println(triangle.getType()); } private double a; private double b; private double c; public Triangle(String color, double a, double b, double c) { super(color); this.setSides(a,b,c); } public void setSides(double a,double b,double c){ if(a+b<=c||a+c<=b||b+c<=a){ System.out.println("三角形兩邊之和必須大于第三邊"); return; } this.a = a; this.b = b; this.c = c; } @Override public double calPerimeter() { return a+b+c; } @Override public String getType() { return "三角形"; } static abstract class test{ } }
final和abstract不能同時使用,static和abstract不能同時使用(并不是絕對互斥,可以同時修飾內部類)。
抽象類避免了子類設計的隨意性,抽象類體現的就是一種模板模式的設計。
2.Java 8改進的接口抽象類是從多個類中抽象出來的模板,如果將這種抽象進行進行的更徹底,則可以提煉出一種更加特殊的“抽象類”-----接口。接口里不能包含普通方法,接口里所有的方法都是抽象方法。Java 8 以后,允許在接口中定義默認方法,默認方法可以提供方法實現。
接口體現的是規范和實現分離的設計哲學。
[修飾符] interface 接口名 extends 父接口1,父接口2... { 零個到多個常量定義... 零個到多個抽象方法定義... 零個到多個內部類、接口、枚舉定義... 零個到多個默認方法或類方法定義... }
接口定義的是一種規范,因此接口里不能包含構造器和初始化代碼塊定義。接口里可以包含成員變量(只能是靜態常量),方法(抽象、默認、類),內部類(包括內部接口、枚舉)定義。
//系統自動為接口里定義的成員變量增加public static final修飾符 int MAX_SIZE=50; public static final MAX_SIZE=50; 接口里的普通方法不管是否使用public abstract修飾符,系統自動為接口里定義的普通方法增加public abstract修飾符。 接口里定義的內部類、內部接口、內部枚舉默認都采用public static修飾符。
public interface Output { int MAX_CACHE_INT=50; void out(); void getData(String msg); default void print(String... msgs){ for(String msg:msgs){ System.out.println(msg); } } default void test(){ System.out.println("默認的test()方法"); } static String staticTest(){ return "接口里的類方法"; } }3.接口和抽象類
相同點:
接口和抽象類都不能被實例化,它們都位于繼承樹的頂端,用于被其他類實現和繼承。
接口和抽象類都可以包含抽象方法,實現接口或繼承抽像類的普通子類必須實現這些抽象方法。
不同點:
接口里只能包含抽象方法和默認方法,不能為普通方法提供方法實現;抽象類則可以包含普通方法。
接口里只能定義靜態常量;抽象類可以定義普通成員變量。
接口里不包含構造器,初始化塊;抽象類包含。
4.內部類內部類的作用:
提供更好的封裝,可以把內部類隱藏在外部類之內,不允許同一個包中的其他類訪問該類。
內部類成員可以直接訪問外部類的私有數據。
匿名內部類適合用于創建那些僅需要一次使用的類。
內部類比外部類多使用三個修飾符:private、protected、static,非靜態內部類不能擁有靜態成員。
在Java 8之前,被局部內部類、匿名內部類訪問的局部變量必須使用final修飾,Java 8以后不必,系統默認。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/68978.html
摘要:在抽象類中,聲明的是,可是。抽象類只能作為子類的超類,子類繼承抽象類時必須被實現。它根本不存在方法的實現實現子類使用關鍵字來繼承抽象類。添加新方法如果你往抽象類中添加新的方法,你可以給它提供默認的實現。轉自,抽象類與接口的區別 抽象類與接口 抽象類與接口一樣,都不能被實例化,可以有具體實現的方法,也可以有抽象的方法。在抽象類中,聲明的field是static、final,method可...
摘要:前言是面對對象的語言,因此有必要單獨紀錄下對象的各種定義和理解。面對對象基本概述概述是基于面向過程的變成思想,是對面向過程的一種封裝。面對對象開發就是不斷的創建對象,使用對象,指揮對象做事情。面對對象設計其實就是在管理和維護對象之間的關系。 前言 java是面對對象的語言,因此有必要單獨紀錄下對象的各種定義和理解。 面對對象,主要包括:面向對象思想,類與對象及其使用,對象的內存圖,成...
摘要:很多常見的面試題都會出諸如抽象類和接口有什么區別,什么情況下會使用抽象類和什么情況你會使用接口這樣的問題。在討論它們之間的不同點之前,我們先看看抽象類接口各自的特性。抽象類抽象類是用來捕捉子類的通用特性的。 很多常見的面試題都會出諸如抽象類和接口有什么區別,什么情況下會使用抽象類和什么情況你會使用接口這樣的問題。本文我們將仔細討論這些話題。 在討論它們之間的不同點之前,我們先看看抽象類...
摘要:案例演示抽象類的成員特點抽象類的成員方法特性抽象方法強制要求子類做的事情。抽象類中定義的是該繼承體系的共性功能。 1.多態的概述及其成員訪問特點代碼體現 A:多態(polymorphic)概述 事物存在的多種形態 B:多態前提- 1.要有繼承關系 2.要有方法重寫 3.要有父類引用指向子類對象。 C:多態中的成員訪問特點之 成員變量:編譯和運行都看父類。 成員方法:編...
閱讀 3920·2021-11-24 10:46
閱讀 1816·2021-11-16 11:44
閱讀 2289·2021-09-22 16:02
閱讀 1401·2019-08-30 15:55
閱讀 1131·2019-08-30 12:46
閱讀 566·2019-08-28 18:31
閱讀 2762·2019-08-26 18:38
閱讀 1094·2019-08-23 16:51