JAVA入門小小白學(xué)習(xí)中ing(接口、類和類的關(guān)系)

小豬學(xué)習(xí)


小小白慢慢學(xué)習(xí)中ing 第十七天

努力努力


本日內(nèi)容(接口、類和類的關(guān)系)


1、接口

2.1.1 什么是接口?

接口就是一種能力和約定。一種協(xié)議,一種規(guī)則。

2.1.2 接口的內(nèi)容

A:接口中,包含靜態(tài)常量,默認的(缺省)修飾符:public static final

B:接口中,包含抽象方法,默認的(缺省)修飾符:public abstract

2.1.3 接口的語法

//1.定義一個接口

interface 接口名{

???????//靜態(tài)常量

???????//抽象方法

}

//2.需要實現(xiàn)類來實現(xiàn)接口:類比子類繼承抽象類。

class 實現(xiàn)類 implements 接口名{

???????//重寫接口中的抽象方法

}

//3.創(chuàng)建實現(xiàn)類的對象

2.1.4 接口引用

同父類一樣,接口也可以聲明為引用,指向?qū)崿F(xiàn)類的對象。其實就是一種接口的多態(tài)。

接口類型的引用 = new 實現(xiàn)類的對象

那么只能調(diào)用接口中所聲明的方法。不能調(diào)用實現(xiàn)類中新增的方法??梢詮娭妻D(zhuǎn)回實現(xiàn)類的類型,就可以調(diào)用新增的方法。

2.1.5 接口的注意點

1、接口可以多實現(xiàn):一個實現(xiàn)類可以同時實現(xiàn)多個接口

package com.qf.demo02_interface;

//定義一種規(guī)則:

interface A{

????????public void testA();//

????????public void fun();

}

//定義另一種規(guī)則

interface B{

????????public void testB();

????????public void fun();

}

//實現(xiàn)類,實現(xiàn)接口A。滿足接口的規(guī)則:其實就是要實現(xiàn)接口中所有的抽象方法。

class DemoA implements A,B{

????????@Override

????????public void testA() {

????????????????System.out.println("DemoA類,滿足接口A的規(guī)則。。。");

????????}

????????@Override

????????public void testB() {

????????????????System.out.println("DemoA類,也滿足接口B的規(guī)則。。。");

????????}

????????@Override

????????public void fun() {

????????????????System.out.println("DemoA類,實現(xiàn)類fun方法。。。");

????????}

}

public class Test1Interface {

????????public static void main(String[] args) {

????????????????A a = new DemoA();

????????????????a.testA();

????????????????a.fun();

????????????????B b = new DemoA();

????????????????b.testB();

????????????????b.fun();

????????????????DemoA demoA = new DemoA();

????????????????demoA.testA();

????????????????demoA.testB();

????????}

}

?

2、接口可以多繼承

類中的方法:有聲明有實現(xiàn)的方法。

接口中方法:有聲明,沒有實現(xiàn)。將功能的描述,和功能的實現(xiàn),分離開

package com.qf.demo03_interface;

//一種規(guī)則

interface C{

????????public void testC();

}

//另一種規(guī)則

interface D{

????????public void testD();

}

//接口可以繼承多個父接口

interface E extends C,D{

????????public void testE();

}

//實現(xiàn)類,實現(xiàn)接口E

class DemoB implements E{

????????@Override

????????public void testC() {

????????????????System.out.println("C協(xié)議。。");

????????}

????????@Override

????????public void testD() {

????????????????System.out.println("D協(xié)議。。");

????????}

????????@Override

????????public void testE() {

????????????????System.out.println("E協(xié)議。。。");

????????}

}

public class Test3Interface {

????????public static void main(String[] args) {

????????????????C c = new DemoB();

????????????????c.testC();

????????????????D d = new DemoB();

????????????????d.testD();

????????????????E e = new DemoB();

????????????????e.testC();

????????????????e.testD();

????????????????e.testE();

????????}

}

?

3、一個類如果實現(xiàn)接口了,還能繼承其他的父類嗎?可以的

意味著,一個類繼承了一個父類:那么就可以直接使用父類的非私有化的屬性和方法。

同時,還實現(xiàn)接口某個接口規(guī)則。

這個類即作為一個父類的子類,又作為了一個接口的實現(xiàn)類。

package com.qf.demo04_interface;

//表示一種協(xié)議,一種規(guī)則

interface H{

????????public void testH();

????????public void fun();

}

//繼承?is - a,子類是一個特殊的父類

class M{

????????public void testM(){

????????????????System.out.println("我是M類的方法。。");

????????}

????????public void fun(){

????????????????System.out.println("M類中的fun方法。。。");

????????}

}

//定義一個類:N

//繼承了父類M:意味著N這個類可以直接使用父類的非私有化的屬性和方法。

//同時實現(xiàn)接口H:意味著滿足接口H中的所有規(guī)則:抽象方法。。

class N extends M implements H{

????????@Override

????????public void testH() {

????????????????System.out.println("滿足了接口H的協(xié)議規(guī)則。。");

????????}

????????//父類的fun方法,一旦存在繼承關(guān)系,相當(dāng)于子類也有一份。

????????// public void fun(){

????????// System.out.println("M類中的fun方法。。。");

????????// }

}

public class Test4 {

????????public static void main(String[] args) {

????????????????M m = new N();//父類引用,指向子類的對象:一種對象的多態(tài)

????????????????m.testM();

????????????????m.fun();

????????????????System.out.println("-----------------");

????????????????H h = new N();//接口引用,指向?qū)崿F(xiàn)類對象:一種接口的多態(tài)

????????????????h.testH();

????????????????h.fun();

????????}

}

4、如果一個類沒有實現(xiàn)接口中的所有的方法,那么它是抽象的

一個實現(xiàn)類可以實現(xiàn)接口,但是如果沒有實現(xiàn)全部的方法, 那么該類是抽象的。等待子類繼承,并且實現(xiàn)抽象方法。

package com.qf.demo05_interface;

interface K{

????????public void test1();

????????public void test2();

}?

abstract class KImpl implements K{

????????@Override

????????public void test1() {

????????}

}

class L extends KImpl{

????????@Override

????????public void test2() {

????????}

}

public class Test5 {

????????public static void main(String[] args) {

????????}

}

?

5、接口中的兩個特殊的方法

1、靜態(tài)方法:

2、默認的方法:jdk1.8版本出現(xiàn)的新特性。

目的:不強制一定要實現(xiàn)某個功能。

2.1.6 關(guān)于接口和抽象類

Java中類都是單繼承的。如果父類的方法種類無法滿足子類的需求,可以通過實現(xiàn)接口來擴充子類的功能。而且接口支持多繼承,多實現(xiàn)的。更靈活一些。

概念:

抽象類:講究的是繼承。

接口:講究的是規(guī)范,規(guī)則。

2.1.7接口的好處

A:降低了程序的耦合性。代碼的關(guān)聯(lián)程度。

????????接口中只做功能的聲明,沒有具體的實現(xiàn)。

????????面向接口編程:關(guān)心功能有哪些

B:定義的都是規(guī)則,對外暴露的功能是一致。

C:接口可以多繼承,以及多實現(xiàn),使用更靈活。

2.1.8 接口回調(diào)

首有個接口A,和它 實現(xiàn)類。然后在另一個類B中,持有A的引用,那么在B類中可以調(diào)用接口A的方法。這就是一種回調(diào)。

2、類和類的關(guān)系

Java中的數(shù)據(jù)了類型:兩大類(基本類型和引用類型)

基本類型:又叫簡單類型。直接賦值數(shù)值即可。4類8種

byte,short,int,long,float,double,char,boolean

引用類型:存儲的地址。操作引用。默認值都是null

String,數(shù)組,Person類,Student,Cat,接口類型。。。

Exception in thread "main" java.lang.NullPointerException

空指針異常:對象是null,沒有,非要訪問它的屬性或方法。

Book book = null;

null.屬性:賦值取值

null.方法(),表示調(diào)用

1、繼承關(guān)系

繼承是指一個類繼承另一個類。一個作為子類,另一個是父類。子類可以使用父類的內(nèi)容,還可以擴展自己的內(nèi)容。(類,接口)

public class Animal{}

public class Cat extends Animal{}

2、實現(xiàn)關(guān)系

實現(xiàn)是指一個類,實現(xiàn)接口中所有的抽象方法。一個類可以同時實現(xiàn)多個接口。

public interface A{}

public class AImple implements A{}

3、依賴關(guān)系

一個類依賴另一個類。兩個類之間的耦合度不大。代碼層面體現(xiàn):一個類作為另一個類的方法的參數(shù)。

public class Pet{}

public class Girl{

???????public void play(Pet pet){

????? }

}

4、關(guān)聯(lián)關(guān)系

兩個類之間的依賴關(guān)系比較強。代碼層面體現(xiàn):一個類作為另一個類的屬性。

public class Book{}

public class Person{

????????Book book;

}

特殊的關(guān)聯(lián)關(guān)系:聚合,組合。。。



希望我能堅持住每天堅持記錄著 ...

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容