封裝是什么?
封裝是面向對象的特征之一,是對象和類概念的主要特性。
封裝,也就是把客觀事物封裝成抽象的類,并且類可以把自己的數據和方法只讓可信的類或者對象操作,對不可信的進行信息隱藏。
封裝,是把客觀對象變成抽象的類的過程,在這個過程中,抽象出具體對象的特征,包裝成一個**“黑盒子”**,達到信息隱藏的目的。封裝后的類會把重要信息隱藏,把自己的數據和方法只讓可信的類或者對象操作。
封裝的意義是什么?
封裝把一個對象的屬性私有化,同時提供一些可以被外界訪問的屬性的方法,如果不想被外界方法,我們大可不必提供方法給外界訪問。但是如果一個類沒有提供給外界訪問的方法,那么這個類也沒有什么意義了。
封裝的意義在于將對象的抽象化,抽象的類內部可以自由進行修改,同時減少耦合,使類相對獨立,并能隱藏信息,保護信息安全。
這段代碼中,將 name 和 age 屬性設置為私有的,只能本類才能訪問,其他類都訪問不了,如此就對信息進行了隱藏:
public class Person {private String name;private int age;
}
繼承是什么?
繼承是使用已存在的類的定義作為基礎建立新類的技術,新類的定義可以增加新的數據或新的功能,也可以用父類的功能,但不能選擇性地繼承父類。通過使用繼承我們能夠非常方便地復用以前的代碼,能夠大大的提高開發的效率。
子類的特征
1、子類擁有父類非private的屬性和方法。
2、子類可以擁有自己屬性和方法,即子類可以對父類進行擴展。
3、子類可以用自己的方式實現父類的方法。
對類進行繼承,被繼承的類叫做父類,繼承的新類叫做子類,子類完全繼承父類的屬性和方法,并且子類是父類的特殊化,它不僅繼承了父類的特征,還會具有自己獨有的特征。父類可以完全代替子類,但子類不能代替父類,就像兒子可以繼承父親的財產,但父親不能繼承兒子的財產一樣,這個特征被叫作“向上轉型”。
繼承的代碼舉例:
父類
public class Animal { private String name; private int id; public Animal(String myName, int myid) { name = myName; id = myid;} public void eat(){ System.out.println(name+"正在吃"); }public void sleep(){System.out.println(name+"正在睡");}public void introduction() { System.out.println("大家好!我是" + id + "號" + name + "."); }
}
子類1:
public class Penguin extends Animal { public Penguin(String myName, int myid) { super(myName, myid); }
}
子類2:
public class Mouse extends Animal { public Mouse(String myName, int myid) { super(myName, myid); }
}
子類繼承了父類非private的屬性和方法,讓代碼更簡潔,并提高了代碼的復用性,而Java中不能多繼承,但是能多重繼承,如上述代碼,子類1繼承父類,子類2繼承子類1,不能同時繼承一個父類。
多態是什么?
多態就是指程序中定義的引用變量所指向的具體類型和通過該引用變量發出的方法調用在編程時并不確定,而是在程序運行期間才確定,即一個引用變量倒底會指向哪個類的實例對象,該引用變量發出的方法調用到底是哪個類中實現的方法,必須在由程序運行期間才能決定。
Java是一個典型的面向對象的編程語言,它屬于解釋型的語言,由于它只在運行時才逐句進行翻譯,所以它引用的變量的類型和該變量調出的類的方法在編程時并不能確定,只能在運行時才能確定,類似于**“薛定諤的貓”,不同的是,這個形態時可以人為引導它“塌陷”**到某一具體的類,這樣一來,程序員可以在不修改源代碼的情況下,就可以讓引用的變量綁定不同的類,從而調用不同的方法,讓程序可以選擇多個狀態,這就是面向對象語言的多態性。
多態如何實現?
Java實現多態有三個必要條件**:繼承、重寫、向上轉型。**
**繼承:**在多態中必須存在有繼承關系的子類和父類。
**重寫:**子類對父類中某些方法進行重新定義,在調用這些方法時就會調用子類的方法。
**向上轉型:**在多態中需要將子類的方法賦給父類對象,只有這樣該引用才能夠具備技能調用父類的方法和子類的方法。
在多態中必須存在繼承關系,子類和分類必須存在,同時子類對父類會進行重寫,形成屬于自己的獨有特征。并將自己方法傳遞給分類,做向上轉型,在向上轉型的過程中,子類會丟失自己獨有的方法,向上轉型的目的是為了讓方法復用。