Java面向对象的三大特征(封装,继承,多态)
一.封裝
1.概念
?? 封裝是面向?qū)ο缶幊陶Z言對(duì)客觀世界的模擬,客觀世界里成員變量都是隱藏在對(duì)象內(nèi)部的,外界是無法直接操作的。
2.封裝原則
??將類的某些信息隱藏在類內(nèi)部,不允許外部程序直接訪問,而是通過該類提供的方法來實(shí)現(xiàn)對(duì)隱藏信息的操作和訪問成員變量private,提供對(duì)應(yīng)的getXxx()/setXxx()方法
3.封裝好處
??1.通過方法來控制成員變量的操作,提高了代碼的安全性
??2.把代碼用方法進(jìn)行封裝,提高了代碼的復(fù)用性
??3.類內(nèi)部的結(jié)構(gòu)可以自由修改。隱藏信息,實(shí)現(xiàn)細(xì)節(jié)。
4.權(quán)限修飾符
??當(dāng)我們?cè)谝粋€(gè)類中定義成員變量時(shí),會(huì)指定一個(gè)變量的類型,除此之外,還會(huì)有修飾符的部分,在此給出定義成員變量的規(guī)范格式:
| // 定義變量 1.[修飾符] 變量類型 變量名稱; 2.[修飾符] 變量類型 變量名稱 = 初始值; |
5.封裝代碼
```java 代碼演示: /*學(xué)生類*/public class Student {private int number;//private修飾三個(gè)屬性private int state;private int score;public Student (){}//無參構(gòu)造器public Student(int number,int state,int score){this.number=number;this.state=state;this.score=score;}//有參構(gòu)造器/*下面是Student類提供的get() set()方法外界可以通過他們?cè)L問!*/public void setNumber(int number){this.number=number;}public int getNumber(){return number;}public void setState(int state){this.state=state;}public int getState(){return state;}public void setScore(int score){this.score=score;}public int getScore(){return score;} } =============================== /*測(cè)試類*? public class StudentDemo {public static void main(String[] args) {//無參構(gòu)造方法創(chuàng)建對(duì)象后使用setXxx()賦值Student s1 = new Student();s1.setName("林青霞");s1.setAge(30);s1.show();//使用帶參構(gòu)造方法直接創(chuàng)建帶有屬性值的對(duì)象Student s2 = new Student("林青霞",30);s2.show();} }二.繼承
1.概述
??繼承是面向?qū)ο笳Z法的三大特征之一。繼承可以降低代碼編寫的冗余度,提高編程的效率。通過繼承,子類獲得了父類的成員變量和方法。繼承就是子類繼承父類的特征和行為,使得子類對(duì)象(實(shí)例)具有父類的實(shí)例域和方法,或子類從父類繼承方法,使得子類具有父類相同的行為。
2.繼承優(yōu)點(diǎn)
1.繼承過來的字段和方法,可以像任何其他字段和方法一樣被直接使用;
2.在子類中可以聲明一個(gè)與父類中同名的新字段或靜態(tài)方法,從而“隱藏”父類中的字段或方法;
3.可以在子類中聲明一個(gè)在父類中沒有的新字段和方法;
4.可以在子類中編寫一個(gè)父類當(dāng)中具有相同名的新實(shí)例方法,這稱為“方法重寫”或“方法覆蓋”;
5.可以在子類中編寫一個(gè)調(diào)用父類構(gòu)造方法的子類構(gòu)造方法,既可以隱式地實(shí)現(xiàn),也可以通過使用關(guān)鍵字super來實(shí)現(xiàn)。
3.變量訪問特點(diǎn)
| 在子類方法中訪問一個(gè)變量,采用的是就近原則。 |
4.代碼演示
//代碼演示: class teacher{ //聲明一個(gè)teacher類為父類String name; //定義父類的成員變量name、age int age;void show(){ //定義父類成員方法,將成員變量輸出System.out.println(name); System.out.println(age); } } class Student extends teacher { //聲明一個(gè)Student類為子類并繼承父類 } public class myfirst {public static void main(String[] args) {System.out.println("學(xué)生");Student student=new Student(); //聲明一個(gè)Student類的實(shí)例對(duì)象studentstudent.name="Tom"; //子類調(diào)用父類的成員變量name并賦值student.age=19; //子類調(diào)用父類的成員變量age并賦值student.show(); //子類調(diào)用父類的成員方法show} }5.繼承中的關(guān)鍵字
1、 extends關(guān)鍵字
在 Java 中,類的繼承是單一繼承,也就是說,一個(gè)子類只能擁有一個(gè)父類,所以 extends 只能繼承一個(gè)類。
2、implements關(guān)鍵字
使用 implements 關(guān)鍵字可以變相的使java具有多繼承的特性,使用范圍為類繼承接口的情況,可以同時(shí)繼承多個(gè)接口(接口跟接口之間采用逗號(hào)分隔)。
3、super 與 this 關(guān)鍵字
super關(guān)鍵字:我們可以通過super關(guān)鍵字來實(shí)現(xiàn)對(duì)父類成員的訪問,用來引用當(dāng)前對(duì)象的父類
this關(guān)鍵字:指向自己的引用。
4、final關(guān)鍵字
- fianl關(guān)鍵字的作用
- final代表最終的意思,可以修飾成員方法,成員變量,類
- final修飾類、方法、變量的效果
- fianl修飾類:該類不能被繼承(不能有子類,但是可以有父類)
- final修飾方法:該方法不能被重寫
- final修飾變量:表明該變量是一個(gè)常量,不能再次賦值
final不能修飾構(gòu)造器
final與static搭配使用不會(huì)導(dǎo)致類加載
Final拓展:
5.static關(guān)鍵字
static的訪問特點(diǎn)
- 非靜態(tài)的成員方法
- 能訪問靜態(tài)的成員變量
- 能訪問非靜態(tài)的成員變量
- 能訪問靜態(tài)的成員方法
- 能訪問非靜態(tài)的成員方法
- 靜態(tài)的成員方法
- 能訪問靜態(tài)的成員變量
- 能訪問靜態(tài)的成員方法
- 總結(jié)成一句話就是:
- 靜態(tài)成員方法只能訪問靜態(tài)成員
6.繼承的注意事項(xiàng)
Java中繼承的注意事項(xiàng)
錯(cuò)誤范例:class A extends B, C { }
7.重寫
- 方法重寫的注意事項(xiàng)
3.代碼實(shí)現(xiàn)
三.多態(tài)
1.多態(tài)概述
-
什么是多態(tài)
? 同一個(gè)對(duì)象,在不同時(shí)刻表現(xiàn)出來的不同形態(tài)
-
多態(tài)的前提
- 要有繼承或?qū)崿F(xiàn)關(guān)系
- 要有方法的重寫
- 要有父類引用指向子類對(duì)象
2.代碼演示
代碼: /*接口類*/ public interface Jumpping {void Jump();} /*測(cè)試類*/ public class AnimalDemo {public static void main(String[] args) {Jumpping j=new Cat();//父類引用指向子類也叫向上轉(zhuǎn)型j.Jump();}}3.成員訪問特點(diǎn)
成員訪問特點(diǎn)
-
成員變量
? 編譯看父類,運(yùn)行看父類
-
成員方法
? 編譯看父類,運(yùn)行看子類
4.多態(tài)的轉(zhuǎn)型
-
向上轉(zhuǎn)型
? 父類引用指向子類對(duì)象就是向上轉(zhuǎn)型
例子:Animal a=new Cat() -
向下轉(zhuǎn)型
? 格式:子類型 對(duì)象名 = (子類型)父類引用;
例子:Cat c=(Cat) Animal
5.多態(tài)的好處與弊端
-
好處
? 提高程序的擴(kuò)展性。定義方法時(shí)候,使用父類型作為參數(shù),在使用的時(shí)候,使用具體的子類型參與操作
-
弊端
? 不能使用子類的特有成員
總結(jié)
以上是生活随笔為你收集整理的Java面向对象的三大特征(封装,继承,多态)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 高cpu_再一次生产 CPU 高负载排查
- 下一篇: java要频繁调用容器时_Java最常见