Java學習筆記之面向?qū)ο缶幊叹?/h1>
更新時間:2021年09月26日 17:29:35 作者:意愿三七
看名字它是注重對象的。當解決一個問題的時候,面向?qū)ο髸咽挛锍橄蟪蓪ο蟮母拍?,就是說這個問題里面有哪些對象,然后給對象賦一些屬性和方法,然后讓每個對象去執(zhí)行自己的方法,問題得到解決
面向?qū)ο缶幊蹋ò?、繼承、組合、多態(tài) 、抽象類、接口)
包
包其實就是類的集合,其本質(zhì)上其實就是一個文件夾,里面存放的. java 文件里面有我們寫的代碼,并且包的存在還可以有效解決在實際開發(fā)過程中程序員. java文件命名重疊問題,其實就是,一個包里面是能有兩個名字相同的.java文件,但是如果是不同的包下就允許這樣的情況存在。
我們創(chuàng)建一個包只需要在 src 目錄底下去創(chuàng)建就行了,公司里面給報的命名一般都是用公司的域名的倒過來的形式,總而言之,要讓別人看出來是這個包的作用。
還有就是,包中的權(quán)限問題,一個包或者包之中的內(nèi)容壓實有權(quán)限的我們先前已經(jīng)了解的 private 和 public 權(quán)限區(qū)別是前者只能在當前類里面用,后者則可以在整個工程里面使用。但是如果一個包中的類或者類中的內(nèi)容沒有任何修飾符,那么即為默認權(quán)限。這種權(quán)限下面僅限在當前包中使用,想要跨包調(diào)用是不可能的。
繼承
繼承其實就是抽象和具體的關(guān)系,關(guān)鍵的地方就是將共性提取出來放在一個類里面,隨后在交給下面具體的類去使用,譬如:貓,狗,這兩個類的共性就是會吃飯,會叫,會跑,那么我們就將這三個共性抽象出來,創(chuàng)建一個類 :動物,讓這個類里面包含前面那三種行為,這樣的話,貓,狗兩個類直接就寫自己繼承那個名叫動物的類,這樣的話就可以省去大量重復的代碼,大大減少我們的代碼量。當然自己的類里面也可寫上自己的獨特行為,比如:貓的類里面可以寫貓可以上樹,這是貓所特有的。。下面看具體的代碼示例。
class Animal {
public void eat {
System.out.println("吃飯");
}
public void shout {
System.out.println("吼叫");
}
pubic void run {
System.out.println("跑步");
}
}
class Dog extends Animal{
}
class Cat extends Animal {
public void climbtree {
System.out.println("爬樹");
}
}
public class Test {
}
總而言之,可以把繼承這種關(guān)系理解成 is a ,cat is a animal( 語法不要在意)。
super 關(guān)鍵字
super關(guān)鍵字與this的用法非常相似,super用于引用當前父類的對象的引用,使用super可在子類里面引用父類里面的字段和方法。
并且當我們想要給子類對象賦值的時候,我們是通過構(gòu)造方法來賦值的,但是值是在父類里面的,因此,我們必須要先有父類的構(gòu)造才能有子類構(gòu)造,所以我們要使用 super來調(diào)用父類的構(gòu)造方法(原理一如 this 調(diào)用 構(gòu)造方法一樣)。
此外,繼承還可層層繼承下去,套好幾層,當然不推薦這樣做,這個時候再使用super 引用的就是其最直接的那個父類。
class Animal {
public String name;
public Animal(String name) {
this.name = name;
System.out.println(this.name);
}
}
class Cat extends Animal {
public Cat (String name) {//此處為cat這個類的構(gòu)造方法
super(name);//此處即為聲明調(diào)用父類那個只有一個參數(shù)的構(gòu)造方法
}
}
public class Test {
public static void main(String[] args) {
Cat cat = new Cat("咪咪");
}
}
//最后打印結(jié)果為 咪咪
其實在我們正常繼承中也會有第八至十行這樣的代碼,但是一般來說都是省略的,看不見的,就像是默認構(gòu)造方法一樣,里面沒有參數(shù)。
下面便是我們的普通默認情況。
class Cat extends Animal {
public Cat () {
super();
}
}
final
被 final 修飾的類是不可以繼承的,一如被 final 修飾的變量不可以被改變一樣,只要記住 final 修飾的東西就意味著不靈活,不能隨意更改即可。
protected關(guān)鍵字
protected 是一種權(quán)限,使用了他之后可以在同一個包的同類或者不同類下面引用,或者不同的包的子類。
protected 與其他幾種包的子類:

組合
類似于上面的,組合就是 has a 的關(guān)系。一輛小轎車在組裝的時候,其自身含有四個輪子,兩個后視鏡,一個車標,等等。
其實就是講一個類的示例當成里一個類的字段。
public class Student {
...
}
public class Teacher {
...
}
public class School {
public Student[] students;
public Teacher[] teacher;
}
多態(tài)
多態(tài)的發(fā)生條件是在,父類和子類當中的函數(shù)重寫,且發(fā)生向上轉(zhuǎn)型的的時候才會產(chǎn)生,而重寫的條件則是要求兩個函數(shù)的參數(shù)條件,函數(shù)內(nèi)容完全一致。
(重寫特點:函數(shù)名相同,返回值相同,函數(shù)列表相同;
重載的特點:函數(shù)名相同,函數(shù)的參數(shù)列表不同,返回值不做要求)
步驟:我們先通過 把子類對象的引用傳給父類對象的引用 (或者其他方法,總之要保證讓父類對象的引用指向子類對象的引用所指向的),這樣我們便發(fā)生了向上轉(zhuǎn)型,之后再用父類對象的引用來引用父子類公有的函數(shù),這個時候就會發(fā)現(xiàn),結(jié)果出來為子類。這就是由于編譯時程序引用的是父類當中的函數(shù),但是當運行時就改引 子類當中的函數(shù)了,這也就是所謂的動態(tài)綁定,在父類基礎(chǔ)上又綁了子類,這樣,我們每次給父類對象的引用附上不同的子類對象的引用,就會導致最后產(chǎn)生不同的結(jié)果,這便是所謂多態(tài),多種狀態(tài)。
下面看代碼示例:
class Animal {
public String name;
public Animal (String name) {
this.name = name;
}
public void running() {
System.out.println(this.name + "正在跑(animal)");
}
}
class Rabits extends Animal {
public Rabits(String name) {
super(name);
}
public void running() {
System.out.println(this.name + "正在跑(rabits)");
}
}
class Cat extends Animal {
public Cat (String name) {
super(name);
}
public void running() {
System.out.println(this.name + "正在跑(Cat)");
}
}
class Pig extends Animal {
public Pig (String name) {
super(name);
}
public void running() {
System.out.println(this.name + "正在跑(Pig)");
}
}
public class TestDemo {
public static void main(String[] args) {
Animal animal = new Rabits("兔兔");
animal.running();
Animal animal2 = new Cat("貓貓");
animal2.running();
Animal animal3 = new Cat("豬豬");
animal3.running();
}
}
執(zhí)行結(jié)果,可以很明顯看到,雖然是用 animal 來引用的,但是最后打印的都是子類自己的

抽象類
抽象類專門就是用來服務(wù)于多態(tài)的,它沒有辦法實例化,并且類的前面必須要有一個 abstract 來修飾它,下圖為抽象類的特性整理。

接口
接口是由用來彌補繼承的不足的,繼承的話只能繼承一個類,但是如果是接口的話,一個類就可以 implements 多個接口 ,而且接口注重的是功能,我們需要在意的是它里面有哪些我們需要的功能,如果有派上用場的就把它 implements 過來。


到此這篇關(guān)于Java學習筆記之面向?qū)ο缶幊叹獾奈恼戮徒榻B到這了,更多相關(guān)Java 面向?qū)ο?內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
-
IDEA中Java出現(xiàn)無效的源發(fā)行版錯誤的解決辦法
這篇文章主要給大家介紹了關(guān)于IDEA中Java出現(xiàn)無效的源發(fā)行版錯誤的解決辦法,IDEA中Java出現(xiàn)?效的源發(fā)?版解決辦法出現(xiàn)該問題的原因是項?Project當中的jdk與電腦當中的jdk版本不?致造成的,需要的朋友可以參考下 2023-10-10
最新評論
面向?qū)ο缶幊蹋ò?、繼承、組合、多態(tài) 、抽象類、接口)
包
包其實就是類的集合,其本質(zhì)上其實就是一個文件夾,里面存放的. java 文件里面有我們寫的代碼,并且包的存在還可以有效解決在實際開發(fā)過程中程序員. java文件命名重疊問題,其實就是,一個包里面是能有兩個名字相同的.java文件,但是如果是不同的包下就允許這樣的情況存在。
我們創(chuàng)建一個包只需要在 src 目錄底下去創(chuàng)建就行了,公司里面給報的命名一般都是用公司的域名的倒過來的形式,總而言之,要讓別人看出來是這個包的作用。
還有就是,包中的權(quán)限問題,一個包或者包之中的內(nèi)容壓實有權(quán)限的我們先前已經(jīng)了解的 private 和 public 權(quán)限區(qū)別是前者只能在當前類里面用,后者則可以在整個工程里面使用。但是如果一個包中的類或者類中的內(nèi)容沒有任何修飾符,那么即為默認權(quán)限。這種權(quán)限下面僅限在當前包中使用,想要跨包調(diào)用是不可能的。
繼承
繼承其實就是抽象和具體的關(guān)系,關(guān)鍵的地方就是將共性提取出來放在一個類里面,隨后在交給下面具體的類去使用,譬如:貓,狗,這兩個類的共性就是會吃飯,會叫,會跑,那么我們就將這三個共性抽象出來,創(chuàng)建一個類 :動物,讓這個類里面包含前面那三種行為,這樣的話,貓,狗兩個類直接就寫自己繼承那個名叫動物的類,這樣的話就可以省去大量重復的代碼,大大減少我們的代碼量。當然自己的類里面也可寫上自己的獨特行為,比如:貓的類里面可以寫貓可以上樹,這是貓所特有的。。下面看具體的代碼示例。
class Animal { public void eat { System.out.println("吃飯"); } public void shout { System.out.println("吼叫"); } pubic void run { System.out.println("跑步"); } } class Dog extends Animal{ } class Cat extends Animal { public void climbtree { System.out.println("爬樹"); } } public class Test { }
總而言之,可以把繼承這種關(guān)系理解成 is a ,cat is a animal( 語法不要在意)。
super 關(guān)鍵字
super關(guān)鍵字與this的用法非常相似,super用于引用當前父類的對象的引用,使用super可在子類里面引用父類里面的字段和方法。
并且當我們想要給子類對象賦值的時候,我們是通過構(gòu)造方法來賦值的,但是值是在父類里面的,因此,我們必須要先有父類的構(gòu)造才能有子類構(gòu)造,所以我們要使用 super來調(diào)用父類的構(gòu)造方法(原理一如 this 調(diào)用 構(gòu)造方法一樣)。
此外,繼承還可層層繼承下去,套好幾層,當然不推薦這樣做,這個時候再使用super 引用的就是其最直接的那個父類。
class Animal { public String name; public Animal(String name) { this.name = name; System.out.println(this.name); } } class Cat extends Animal { public Cat (String name) {//此處為cat這個類的構(gòu)造方法 super(name);//此處即為聲明調(diào)用父類那個只有一個參數(shù)的構(gòu)造方法 } } public class Test { public static void main(String[] args) { Cat cat = new Cat("咪咪"); } } //最后打印結(jié)果為 咪咪
其實在我們正常繼承中也會有第八至十行這樣的代碼,但是一般來說都是省略的,看不見的,就像是默認構(gòu)造方法一樣,里面沒有參數(shù)。
下面便是我們的普通默認情況。
class Cat extends Animal { public Cat () { super(); } }
final
被 final 修飾的類是不可以繼承的,一如被 final 修飾的變量不可以被改變一樣,只要記住 final 修飾的東西就意味著不靈活,不能隨意更改即可。
protected關(guān)鍵字
protected 是一種權(quán)限,使用了他之后可以在同一個包的同類或者不同類下面引用,或者不同的包的子類。
protected 與其他幾種包的子類:
組合
類似于上面的,組合就是 has a 的關(guān)系。一輛小轎車在組裝的時候,其自身含有四個輪子,兩個后視鏡,一個車標,等等。
其實就是講一個類的示例當成里一個類的字段。
public class Student { ... } public class Teacher { ... } public class School { public Student[] students; public Teacher[] teacher; }
多態(tài)
多態(tài)的發(fā)生條件是在,父類和子類當中的函數(shù)重寫,且發(fā)生向上轉(zhuǎn)型的的時候才會產(chǎn)生,而重寫的條件則是要求兩個函數(shù)的參數(shù)條件,函數(shù)內(nèi)容完全一致。
(重寫特點:函數(shù)名相同,返回值相同,函數(shù)列表相同;
重載的特點:函數(shù)名相同,函數(shù)的參數(shù)列表不同,返回值不做要求)
步驟:我們先通過 把子類對象的引用傳給父類對象的引用 (或者其他方法,總之要保證讓父類對象的引用指向子類對象的引用所指向的),這樣我們便發(fā)生了向上轉(zhuǎn)型,之后再用父類對象的引用來引用父子類公有的函數(shù),這個時候就會發(fā)現(xiàn),結(jié)果出來為子類。這就是由于編譯時程序引用的是父類當中的函數(shù),但是當運行時就改引 子類當中的函數(shù)了,這也就是所謂的動態(tài)綁定,在父類基礎(chǔ)上又綁了子類,這樣,我們每次給父類對象的引用附上不同的子類對象的引用,就會導致最后產(chǎn)生不同的結(jié)果,這便是所謂多態(tài),多種狀態(tài)。
下面看代碼示例:
class Animal { public String name; public Animal (String name) { this.name = name; } public void running() { System.out.println(this.name + "正在跑(animal)"); } } class Rabits extends Animal { public Rabits(String name) { super(name); } public void running() { System.out.println(this.name + "正在跑(rabits)"); } } class Cat extends Animal { public Cat (String name) { super(name); } public void running() { System.out.println(this.name + "正在跑(Cat)"); } } class Pig extends Animal { public Pig (String name) { super(name); } public void running() { System.out.println(this.name + "正在跑(Pig)"); } } public class TestDemo { public static void main(String[] args) { Animal animal = new Rabits("兔兔"); animal.running(); Animal animal2 = new Cat("貓貓"); animal2.running(); Animal animal3 = new Cat("豬豬"); animal3.running(); } }
執(zhí)行結(jié)果,可以很明顯看到,雖然是用 animal 來引用的,但是最后打印的都是子類自己的
抽象類
抽象類專門就是用來服務(wù)于多態(tài)的,它沒有辦法實例化,并且類的前面必須要有一個 abstract 來修飾它,下圖為抽象類的特性整理。
接口
接口是由用來彌補繼承的不足的,繼承的話只能繼承一個類,但是如果是接口的話,一個類就可以 implements 多個接口 ,而且接口注重的是功能,我們需要在意的是它里面有哪些我們需要的功能,如果有派上用場的就把它 implements 過來。
到此這篇關(guān)于Java學習筆記之面向?qū)ο缶幊叹獾奈恼戮徒榻B到這了,更多相關(guān)Java 面向?qū)ο?內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
IDEA中Java出現(xiàn)無效的源發(fā)行版錯誤的解決辦法
這篇文章主要給大家介紹了關(guān)于IDEA中Java出現(xiàn)無效的源發(fā)行版錯誤的解決辦法,IDEA中Java出現(xiàn)?效的源發(fā)?版解決辦法出現(xiàn)該問題的原因是項?Project當中的jdk與電腦當中的jdk版本不?致造成的,需要的朋友可以參考下2023-10-10