多態/介面

來源:互聯網
上載者:User

標籤:

回顧:
1.static final常量
2.抽象方法:
abstract,只有方法的定義,沒有方法的實現
3.抽象類別:
abstract修飾
包含抽象方法的類必須是抽象類別
不能被執行個體化
需被繼承,子類:
1)重寫父類的所有抽象方法----變不完整為完整
2)也聲明為抽象的
意義:
1)父類的意義:
1.1)封裝公用的,代碼的重用
1.2)為所有子類提供一個公用的類型,向上造型
2)包含抽象方法,為所有子類提供一個統一的入口
4.介面:
是一個標準、規範
interface定義
只能包含常量和抽象方法
不能被執行個體化
需要被實現(implements)的,實作類別:
必須重寫介面中所有抽象方法
可以實現多個介面,用逗號分隔
若既繼承又實現時,先繼承後實現
介面間可以繼承

 


class Dog{
String name;
int age;
}
class Person extends Dog{ //不合理的
}

Person p1 = new Person();
p1.name = "";
p1.age = 26;

 

 

 

 

 

 

繼承是為了實現代碼重用,但不能為了重用隨意繼承,
繼承要符合is a的關係

class Student extends Person{
}
class Teacher extends Person{
}
class Doctor extends Person{
}

繼承要符合is a的關係
class Six extends Shape{
public Six(double c){
this.c = c;
}
public double area(){
return 0.0721*c*c;
}
}

interface CCB extends UnionPay{
public void payFire();
}
class CCBImpl implements CCB{
重寫4個方法
}

介面不包含構造方法,抽象類別可以包含構造方法

1.構造方法初始化成員變數
2.不能包含普通方法

 


NstInnerDemo

 

 

有一個類就會有一個位元組碼檔案

問:匿名內部類有獨立的.class嗎?------有

NstInnerDemo$1.class
NstInnerDemo$2.class
Mama$Baby.class

 

 

正課:
1.多態:多種形態
1)多態的意義:
1.1)同一類型的引用指向不同的對象時,有不同的實現
---------cut()、run()-----行為的多態
1.2)同一個對象被造型為不同的類型時,有不同的功能
---------我、水---------對象的多態
2)向上造型:
2.1)父類型的引用指向子類的對象
2.2)能向上造型的類型有: 父類、所實現的介面
2.3)能點出來什麼,看引用的類型
3)強制類型轉換,成功的情況有兩種:
3.1)引用所指向的對象,就是該類型
3.2)引用所指向的對象,實現了該介面
4)強轉失敗會發生類型轉換異常(ClassCastException),
強轉之前最好通過instanceof來判斷引用所指向的對象是否是該類型,
instanceof返回true或false,強轉成功的條件就是instanceof為true的條件
2.物件導向三大特徵:
1)封裝:
1.1)類:封裝的對象的資料和行為
1.2)方法:封裝的是具體的業務實現細節
1.3)存取控制修飾符:封裝的是訪問的許可權--保護資料
2)繼承:
2.1)目的:代碼的重用
2.2)父類:共有的 子類:特有的
繼承後子類具有:父類的和子類的
2.3)單一繼承,傳遞性
3)多態:
3.1)意義: 行為的多態、對象的多態
3.2)向上造型、強制類型轉換、instanceof
3.3)表現形式: 重寫(override)、重載(overload)
3.物件導向課程內容總結:
1)第一天:
1.1)什麼是類?什麼是對象?
1.2)如何建立類?如何建立對象?如何訪問類成員?
1.3)參考型別之間畫等號
1.4)null和NullPointerException
2)第二天:
2.1)方法的重載
2.2)構造方法
2.3)this關鍵字
2.4)參考型別數組
3)第三天:
3.1)java記憶體管理:堆、棧、方法區
3.2)繼承
3.3)super關鍵字
3.4)向上造型
4)第四天:
4.1)方法的重寫、重寫與重載的區別
4.2)package、import
4.3)存取控制修飾符
4.4)static
4.5)final
4.6)static final常量
5)第五天:
5.1)抽象方法
5.2)抽象類別
5.3)介面
6)第六天:
6.1)多態: 向上造型、強制類型轉換、instanceof
6.2)成員內部類、匿名內部類

 

任務:
1.農行ATM系統完善
2.自己對物件導向總結
3.課後作業:只做第一題
4.每日一練
5.運行Shoot項目----瞭解需求

 

 

 

 


農行ATM機系統
要求:
1.所有卡都能插
2.只有農行卡才能支付電話費

判斷卡的類型-------instanceof

 

走心

 

 

 

 

 

 


ATM機只是提供了一個入口(按鈕),
實際操作的還是那個卡

 

 

 

 

 

 

 

 

 

 

 

UnionPay-----所有行
ICBCImpl-----工行卡
ICBC-----------工行
ABCImpl------農行卡
ABC------------農行

 

 

 

 


Aoo o1 = new Boo(); //向上造型
Boo o2 = (Boo)o1; //強制類型轉換-----成功
Inter1 o3 = (Inter1)o1; //強制類型轉換-----成功
Coo o4 = (Coo)o1; //強制類型轉換-----失敗

if(o1 instanceof Coo){
Coo o4 = (Coo)o1;
}

 

 

 

System.out.println(o1 instanceof Boo); //true
System.out.println(o1 instanceof Inter1); //true
System.out.println(o1 instanceof Coo); //false

interface Inter1{
}
class Aoo{
}
class Boo extends Aoo implements Inter1{
}
class Coo extends Aoo{
}

 

 

 

 

 


子類小,父類大

人 p1 = new 理髮師(); //小到大
人 p2 = new 外科醫生(); //小到大
理髮師 p3 = new 人(); //大到小

 

 

 

 

 

 

 

子類中的東西,多於等於父類的


我 me = new 我();
me.講課()/揍他()/咬他()/收工資()
講師 p1 = me; //向上造型
p1.講課();
孩子他媽 p2 = me;
老公的老婆 p3 = me;

p1.講課();
p2.揍他();
p3.咬他();
p3.收工資();


interface 講師{
講課();
}
interface 孩子他媽{
揍他();
}
interface 老公的老婆{
咬他();
收工資();
}
class 我 implements 講師,孩子他媽,老公的老婆{
講課(){}
揍他(){}
咬他(){}
收工資(){}
}

 

 

 

 

 

 

 


人 p1 = new 理髮師(); //向上造型
人 p2 = new 外科醫生();
人 p3 = new 演員();

p1.cut();--------剪髮
p2.cut();--------開刀
p3.cut();--------停止表演

abstract class 人{
abstract cut();
}
class 理髮師 extends 人{
cut(){ 剪髮 }
}
class 外科醫生 extends 人{
cut(){ 開刀 }
}
class 演員 extends 人{
cut(){ 停止表演 }
}

 

 

 

 

 

 

 


設計原則:
1.將多個類公用的東西抽到父類中
2.若所有子類行為都一樣,做成普通方法
若所有子類行為不一樣,做成抽象方法
3.符合既是也是的關係時,使用介面

 


需求:
達內講師-----------解決問題()、培訓員工()、編輯稿件()
達內教學副總裁--解決問題()、培訓員工()、編輯稿件()
韓總-----------------解決問題()、培訓員工()、編輯稿件()
專案經理-----------編輯稿件()

interface 企業技術顧問{
解決問題();
培訓員工();
}
interface 技術圖書作者{
編輯稿件();
}
abstract class 達內職員{
姓名、年齡、薪酬
上班打卡(){ 按指紋、拍照 }
下班打卡(){ 按指紋、拍照 }
abstract 完成工作();
}
class 達內講師 extends 達內職員 implements 企業技術顧問,技術圖書作者{
}
class 達內專案經理 extends 達內職員 implements 技術圖書作者{
}
class 達內班主任 extends 達內職員{
}

 

多態/介面

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.