java面向對象:關鍵字 —(17)

interface:接口

1.使用說明:

1.接口使用interface來定義

  • 2.Java中,接口和類是并列的兩個結構
  • 3.如何定義接口:定義接口中的成員
  •  3.1 JDK7及以前:只能定義全局常量和抽象方法
    
  •  	>全局常量:public static final的.但是書寫時,可以省略不寫
    
  •  	>抽象方法:public abstract的
    
  •  3.2 JDK8:除了定義全局常量和抽象方法之外,還可以定義靜態方法、默認方法(略
    
    1. 接口中不能定義構造器的!意味著接口不可以實例化
    1. Java開發中,接口通過讓類去實現(implements)的方式來使用.
  • 如果實現類覆蓋了接口中的所抽象方法,則此實現類就可以實例化
  • 如果實現類沒覆蓋接口中所的抽象方法,則此實現類仍為一個抽象類
    1. Java類可以實現多個接口 —>彌補了Java單繼承性的局限性
  • 格式:class AA extends BB implements CC,DD,EE
    1. 接口與接口之間可以繼承,而且可以多繼承

    1. 接口的具體使用,體現多態性
    1. 接口,實際上可以看做是一種規范

2.舉例:

在這里插入圖片描述

class Computer{

public void transferData(USB usb){//USB usb = new Flash();usb.start();System.out.println("具體傳輸數據的細節");usb.stop();
}

}

interface USB{
//常量:定義了長、寬、最大最小的傳輸速度等

void start();void stop();

}

class Flash implements USB{

@Override
public void start() {System.out.println("U盤開啟工作");
}@Override
public void stop() {System.out.println("U盤結束工作");
}

}

class Printer implements USB{
@Override
public void start() {
System.out.println(“打印機開啟工作”);
}

@Override
public void stop() {System.out.println("打印機結束工作");
}

}
體會:

  • 1.接口使用上也滿足多態性
  • 2.接口,實際上就是定義了一種規范
  • 3.開發中,體會面向接口編程!

3.體會面向接口編程的思想

在這里插入圖片描述

面向接口編程:我們在應用程序中,調用的結構都是JDBC中定義的接口,不會出現具體某一個
數據庫廠商的API。
4.Java8中關于接口的新規范
//知識點1:接口中定義的靜態方法,只能通過接口來調用。

//知識點2:通過實現類的對象,可以調用接口中的默認方法。
//如果實現類重寫了接口中的默認方法,調用時,仍然調用的是重寫以后的方法

//知識點3:如果子類(或實現類)繼承的父類和實現的接口中聲明了同名同參數的默認方法,那么子類在沒重寫此方法的情況下,默認調用的是父類中的同名同參數的方法。–>類優先原則
//知識點4:如果實現類實現了多個接口,而這多個接口中定義了同名同參數的默認方法,
//那么在實現類沒重寫此方法的情況下,報錯。–>接口沖突。
//這就需要我們必須在實現類中重寫此方法
//知識點5:如何在子類(或實現類)的方法中調用父類、接口中被重寫的方法
public void myMethod(){
method3();//調用自己定義的重寫的方法
super.method3();//調用的是父類中聲明的
//調用接口中的默認方法
CompareA.super.method3();
CompareB.super.method3();
}
5.面試題:
抽象類和接口的異同?
相同點:不能實例化;都可以包含抽象方法的。
不同點:
1)把抽象類和接口(java7,java8,java9)的定義、內部結構解釋說明
2)類:單繼承性 接口:多繼承
類與接口:多實現

代理模式

  1. 解決的問題

代理模式是Java開發中使用較多的一種設計模式。代理設計就是為其他對象提供一種代理以控制對這個對象的訪問。

  1. 舉例
    interface NetWork{

    public void browse();

}

//被代理類
class Server implements NetWork{

@Override
public void browse() {System.out.println("真實的服務器訪問網絡");
}

}
//代理類
class ProxyServer implements NetWork{

private NetWork work;public ProxyServer(NetWork work){this.work = work;
}public void check(){System.out.println("聯網之前的檢查工作");
}@Override
public void browse() {check();work.browse();}

}

  1. 應用場景

在這里插入圖片描述

1. 解決的問題

實現了創建者與調用者的分離,即將創建對象的具體過程屏蔽隔離起來,達到提高靈活性的目的。

2. 具體模式

簡單工廠模式:用來生產同一等級結構中的任意產品。(對于增加新的產品,需要修改已有代碼)
工廠方法模式:用來生產同一等級結構中的固定產品。(支持增加任意產品)
抽象工廠模式:用來生產不同產品族的全部產品。(對于增加新的產品,無能為力;支持增加產品族)

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

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

相關文章

原生js來實現對dom元素class的操作方法

jQuery操作class的方式非常強大 寫了一個利用原生js來實現對dom元素class的操作方法 1.addClass:為指定的dom元素添加樣式 2.removeClass:刪除指定dom元素的樣式 3.toggleClass:如果存在(不存在),就刪除(添加)一個樣式 4.hasClass:判斷樣式是否存在 下面為一toggleC…

python+selenium配置Edge瀏覽器

Chrome, Firefox只需要修改conftest.py文件中的 pytest.fixture(scopesession)def browser(): return BzwUtil.read_yml(config.yml,WEB_INFO,BROWSER) add option in pytest command line def pytest_addoption(parser): parser.addoption("--browser", actio…

JSON.parse和JSON.stringify方法

JSON.parse() JSON.parse()方法將json字符串轉化為Javascript值或對象。 語法 JSON.parse(text[,reviver]) 參數 text:要被解析成Javascript值的字符串 reviver:若是一個函數則規定了原始值(text)如何被解析改造,在被返回前。 示例 JSON.parse({}); //…

java面向對象:異常處理 —(18)

1. 異常的體系結構 java.lang.Throwable |-----java.lang.Error:一般不編寫針對性的代碼進行處理。|-----java.lang.Exception:可以進行異常的處理|------編譯時異常(checked)|-----IOException|-----FileNotFoundException|-----ClassNotFoundException|------運行時異常(un…

vue請求簡單配置

簡單記錄一下vue的http請求配置相關 測試環境請求接口設置:   1. config/dev.env.js添加:     module.exports merge(prodEnv, {       NODE_ENV: "development",       API_ROOT: "http://", //配置http請求頭     })…

【vue報錯】——listen EADDRINUSE :::8080 解決方案

問題原因: 此項錯誤表示 8080 端口被占用 解決方案一: 打開cmd 輸入:netstat -ano 查看所有端口信息,如圖,找到端口 8081,以及對應的 PID 輸入:tskill PID 即可殺死進程 解決方案二&#xff1a…

記錄_20190626

java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result異常的解決方法 原來JAVA中如果用BigDecimal做除法的時候一定要在divide方法中傳遞第二個參數,定義精確到小數點后幾位,否則在不整除的情況下…

String與Array

public class Api {Testpublic void StringApi(){// equals() 判斷內容是否相同區分大小寫// equalsIgnoreCase() 判斷內容是否相同不區分大小寫// length() 獲取長度// charAt(int index) 獲取某個索引位置的字…

HTML與CSS布局技巧總結

很多人對CSS的布局有困惑,實際的應用場景中由于布局種類多難以選擇。今天我花些時間總結下自己對CSS布局的理解,分析下了解各種布局的優劣,同時希望能分享給初入前端的朋友們一些在布局上的經驗,如果有那些地方總結的不好&#xf…

當談論迭代器時,我談些什么?

花下貓語:之前說過,我對于編程語言跟其它學科的融合非常感興趣,但我還說漏了一點,就是我對于 Python 跟其它編程語言的對比學習,也很感興趣。所以,我一直希望能聚集一些有其它語言基礎的同學,一…

在Vue-cli項目中使用echarts

該示例使用 vue-cli 腳手架搭建 安裝echarts依賴 npm install echarts -S11 或者使用國內的淘寶鏡像: 安裝 npm install -g cnpm --registryhttps://registry.npm.taobao.org11 使用 cnpm install echarts -S11 創建圖表 全局引入 main.js // 引入echarts im…

Java的模板文件配置

Java的Mappers文件配置 <?xml version"1.0" encoding"UTF-8" ?><!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace"com.qfedu.…

Python爬蟲學習二

1、selenium自動測試工具 2、主要使用selenium的目的是跳過登錄驗證3、下載驅動器下載請求庫from selenium import webdriver import time#1、 直接在script文件夾中找驅動 driverwebdriver.Chrome() time.sleep(5) driver.close()#2、找到驅動路徑 #webdriver.Chrome(rD:\Pyth…

通過GitHub Pages創建個人主頁

登陸github,創建新倉庫&#xff0c;寫入名字, 這里要以github.io做后綴, 不然創建出來的不是GitHub Pages 打開終端, cd到自己想要的文件夾后clone到本地 git clone https://github.com/username/username.github.io 進入這個項目文件夾 cd username.github.io 把寫好HTML項目拷…

Spring IOC 配置文件模板

基于XML的普通設置 <?xml version1.0 encodingUTF-8 ?> <beans xmlns"http://www.springframework.org/schema/beans"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xmlns:context"http://www.springframework.org/schema/contex…

validate+jquery+ajax表單驗證

1.案例 1.1 Html form表單內容 <form class"cForm" id"cForm" method"post" action""> <p> <label for"user">用戶名</label> <input id"user" name"user" required minlen…

Html5做webapp中界面適配的問題總結

做一款軟件首先是要做出相應的界面&#xff0c;然而對于手機軟件開發者來說&#xff0c;大小各異的手機屏幕卻給我們帶來了不少的麻煩。HTML5技術在大家的心中要比傳統的Android/iOS/wp簡單的多&#xff0c;因為它的適配性和平臺跨越方面比較出色。在外看來卻不是那樣的&#x…

設置Maven下載鏡像源(直接替換其中的 settings.xml 內容即可)

<?xml version"1.0" encoding"UTF-8"?> <settings xmlns"http://maven.apache.org/SETTINGS/1.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/SETTINGS/1.0.…

P1576 最小花費

----------------------------------- 這道題就是圖論最短路&#xff0c;但是我們要改一下一些細節 比如說&#xff0c;因為這是算匯率&#xff0c;我們的初始化就要是0 我們還要改一改松弛操作 ----------------------------------- 還有&#xff0c;題目上給的是匯率&#xf…

css hack技術整理

做前端多年&#xff0c;雖然不是經常需要hack&#xff0c;但是我們經常會遇到各瀏覽器表現不一致的情況。基于此&#xff0c;某些情況我們會極不情愿的使用這個不太友好的方式來達到大家要求的頁面表現。我個人是不太推薦使用hack的&#xff0c;要知道一名好的前端&#xff0c;…