抽象類、接口、多態都是面向對象中很基礎的東西,我相信看到能本篇博客的人本不會再糾結它的基本定義了,本篇文章將盡量的更加深層次的挖掘其內涵,希望能對大家有幫助。
一、抽象類1、形式
1 abstract class Ceshi 2 { 3 abstract void show(); 4 } 5 class DemoA extends Ceshi 6 { 7 void show() 8 { 9 System.out. 2、特點
a、抽象類不可以被實例化
b、抽象類必須有其子類覆蓋了所有抽象方法后,該子類才可以實例化,否則,該子類還是抽象類。
c、抽象方法必須定義在抽象類中,該類必須也被abstract修飾。
3、那么問題來了
a、抽象類有構造函數嗎?
有,用于給子類實例化。
b、抽象類可以不定義抽象方法嗎?
事實上是可以的,但是很少見。
c、抽象類和一般類的異同點。 相同點: 抽象類和一般類都是用來描述事物的,都在內部定了成員。 不同點: 1,一般類有足夠的信息描述事物。抽象類描述事物的信息有可能不足。 2,一般類中不能定義抽象方法,只能定非抽象方法。抽象類中可定義抽象方法,同時也可以定義非抽象方法。 3,一般類可以被實例化。抽象類不可以被實例化。
二、接口 從某種意義上說,接口是一種特殊形式的抽象類,在java語言中抽象類表示的是一種繼承關系,一個類只能繼承繼承一個抽象類,而一個類卻可以實現多個接口。
我們都知道接口的定義方式是
interface Demo{ void show(); }其實對于接口當中常見的成員:而且這些成員都有固定的修飾符。a、全局常量: public static final
b、抽象方法:public abstract
1、由此得出結論,接口中的成員都是公共的權限。即全寫是
interface Demo{ public static final int num = 4; public abstract void showa();}2、接口特點
a、接口是對外暴露的規則,是程序功能的擴展。
b、接口降低了耦合性。
c、一個類可以實現多個接口
abstract class Test2 extends Q implements A,Z{}3、接口與抽象類異同點
相同點: 都是不斷向上抽取而來的。
不同點:
1,抽象類需要被繼承,而且只能單繼承。接口需要被實現,而且可以多實現。
2,抽象類中可以定義抽象方法和非抽象方法,子類繼承后,可以直接使用非抽象方法。接口中只能定義抽象方法,必須由子類去實現。
三、多態 一個對象有不同的形態,這就是多態。
比如 動物 ani = new 狗();
這就是多態在代碼中的體現:父類引用指向子類對象。
1、多態好處與弊端
多態的好處:提高了代碼的擴展性,前期定義的代碼可以使用后期的內容。
多態的弊端:前期定義的內容不能使用(調用)后期子類的特有內容。
2、向下轉型
動物 ani = new Cat();Cat c = (Cat)ani;
3、內部類
內部類是我們以前建的比較少的,其實就是類里面有類。
class Outer//外部類{ class Inner// 內部類。 { } } a、內部類如何引用外部類?
內部類持有了外部類的引用。 外部類名.this。
class Outer{ int num = 3; class Inner { int num = 4; void show() { int num = 5; System.out.println(Outer.this.num); } } void method() { new Inner().show(); }}3、內部類可以存放在局部位置上,且在局部位置上只能訪問局部中被final修飾的局部變量。
class Outer{ void method() { final int x = 9; class Inner { public String toString() { } } }}4、匿名內部類
匿名內部類是內部類的一種簡寫形式,其實就是一個匿名子對象。
public void method() { new Demo()//匿名內部類。 { void show() { System.out.println("show:"+num); } }.show(); }四、最后抽象類、接口和多態雖然簡單,但是常用,尤其像是內部類、匿名內部類這些我們以前接觸較少,更應該重點掌握。
新聞熱點
疑難解答