重慶—java網際網路架構軟體工程師學習記錄—Day08(面向物件2)
Java網際網路架構軟體工程師——第一階段
Day08–面向物件2文章目錄
前言
學習繼承的多種用法和幾個關鍵字的用法
提示:以下是本篇文章正文內容,下面案例可供參考
一、this關鍵字
1.1概述
代表的是本類物件 的引用
用來呼叫 本類裡的 成員變數.方法
大多數情況下,都可以省略
必須出現的場景有兩個:
—當成員變數名 和 區域性變數名 相同時
—構造方法間 互相呼叫時
1.2 場景1—當同名的成員變數和區域性變數,用this呼叫成員變數
程式碼如下(示例):
public class Test1_This {
public static void main(String[] args) {
//TODO
// new Person().show();
new Person().test();
}
}
class Person{
//當成員變數 和 區域性變數 同名時,使用this
int sum = 10;
int age = 20;//成員變數
public void test(){
int age = 10 ;
age = 100 ;//改了區域性變數
System.out.println(age);//區域性變數,100
this.age = 200 ;//改了成員變數
System.out.println(this.age);//成員變數,200
}
public void show(){
int age = 10;//區域性變數
System.out.println(age);//就近原則,使用了局部變數,10?
//TODO 使用同名的 age成員變數
//TODO this代表本類物件的引用,可以呼叫本類的資源
//本質上,底層幫你建立了一個本類物件,叫this
//Person this = new Person();
//場景1:當同名的成員變數和區域性變數,用this呼叫成員變數
System.out.println(this.age);
//使用了成員變數,10
// System.out.println(this.sum);
//不同名時,可以省略this
System.out.println(sum);
}
}
1.3 場景2—構造方法間的呼叫
小總結:
如果想要完成 構造方法間的呼叫,使用this
如果this出現在構造方法裡,必須是第一條語句
程式碼如下(示例)
//測試 this關鍵字
public class Test02 {
public static void main(String[] args) {
//場景2.構造方法間的呼叫
new Person2();
new Person2(1);
new Person2("");
}
}
class Person2{
public Person2(){
//無參構造 呼叫 含參構造 --- 必須是第一條語句
this("小明");
System.out.println(1);
}
public Person2(int age){
// 含參構造 呼叫 無參構造 ---必須是第一條語句
this();
System.out.println(2);
}
public Person2(String name){
System.out.println(name);
}
}
二、訪問控制符
用來控制一個類,或者類中的成員的訪問範圍。
三、繼承
3.1 概述
是父類和子類之間的關係;繼承只有一個父類;子類繼承父類之後,就擁有了父類的全部功能
好處:提高了父類裡程式碼的複用性,減少了子類程式碼的編寫
3.2 特點
—使用extends關鍵字
—相當於子類把父類的功能複製了一份
—java只支援單繼承
—繼承可以傳遞(爺爺,兒子,孫子的關係)
—不能繼承父類的私有成員
—繼承多用於功能的修改,子類可以擁有父類的功能的同時,進行功能拓展
—像是is a 的關係
程式碼如下(示例):
//測試 繼承
public class Test3_Extends {
public static void main(String[] args) {
//建立子類物件測試
// new Son().eat();//使用了爸爸類裡方法
new Son().xiaqi();//使用了爺爺類裡方法
}
}
//4,父類 抽取子類的 共性程式碼
class Yeye{
public void xiaqi(){
System.out.println("爺爺泡的茶");
}
}
class Baba extends Yeye{
//6,父類的私有成員 ,無法被繼承
private void eat(){//提高複用性
System.out.println("吃肉");
}
}
//1,使用關鍵字extends表示繼承關係
//5,java只支援單繼承
class Son extends Baba{
//3,繼承關係是一種強制的依賴關係-強耦合
//2,子類可以使用父類的所有功能
}
3.3 super關鍵字
—1,用在子類裡.呼叫父類的資料
—2,super如果出現在構造方法裡,必須是第一條語句
3.4 方法的重寫(override)
3.4.1 概述
前提:發生父子關係
子類繼承了父類後,子類可以使用父類的所有內容,而且子類還可以新增擴充套件的功能,而且子類還能改(重寫)父類的功能.
3.4.2 特點
–發生在子類中,想改父類原來的功能
–在子類中的方法宣告/方法簽名 和父類一樣
–方法宣告: 方法的返回值 方法名(引數列表
3.5 繼承的使用
3.5.1 繼承的 成員變數 使用
1,子類想要用父類的成員變數,通過super使用
2,super在底層幫你建立了一個父類的物件
3,通過super使用父類的功能
程式碼如下(示例):
// 測試 使用 繼承 成員變數的使用
public class Test04 {
public static void main(String[] args) {
new z().show();
new z().name();
}
}
class f{
String name = "小小";
public void name() {
System.out.println(88);
}
}
class z extends f{
String name = "jack";
int age = 10;
public void show() {
int age = 20;
System.out.println(age);//就近原則,使用區域性變數
System.out.println(this.age);//使用成員變數
System.out.println(name);//用了自己的jack
//想要在子類中,用父類的name?---使用 super
//super 表示父類物件的一個引用,專門用來呼叫父類的功能
//f super = new f();
super.name="rose";//修改父類的變數
System.out.println(super.name);
//System.out.println(super.name());
}
3.5.2 繼承的 成員方法 使用
1,子類繼承父類後,
2,可以使用父類的所有功能(除了private)
3,還可以進行功能擴充套件
4,還可以 修改 父類的功能–重寫–在不影響父類原有功能的前提下,把子類的功能進行修改
5,重寫的要求:繼承關係+有許可權+方法宣告和父類一樣
6,開閉原則OCP:關閉原始碼修改,開放功能擴充套件
程式碼如下(示例):
// 測試 繼承的 成員方法 使用
public class Test05 {
public static void main(String[] args) {
new zi2().id();
new zi2().sex();
}
}
class f2{
public void id() {
System.out.println(2144);
}
public void sex(){
System.out.println('女');
}
}
//子類可以繼承父類的
class zi2 extends f2{
public void name() {
System.out.println("小小");
}
//改變父類的功能---方法的重寫
//要求: 子類的方法宣告必須和父類一樣+有足夠的許可權
public void sex() {
// super.sex();//呼叫父類的sex(),原來的功能沒有任何影響
System.out.println('男');
}
}
3.5.3 繼承的 構造方法 使用
1,子類繼承了父類後,構造方法裡,預設隱藏著super()
2,當父類中不存在無參構造時(只提供了含參構造),子類只能呼叫父類的含參構造
3,父類的構造方法 可以被繼承嗎 --不可以
4,哪些資源不可以繼承 —私有的+構造方法
程式碼如下(示例):
//測試 繼承的 構造方法
public class Test06 {
public static void main(String[] args) {
//先執行父類的構造方法 -- super(),在執行自己的
new zi3();
}
}
class f3{
public f3(){
System.out.println(120);
}
public f3(int i){
System.out.println(888);
}
}
class zi3 extends f3{
public zi3(){
//隱藏的,預設就存在,而且在第一條語句;
//主動找到了父類的 無參構造 方法
super();
//super(6);//無參構造沒了!!
System.out.println("父類的構造方法");
}
}
四、擴充套件
4.1 overload和override的區別
overload是過載:
在一個類裡的現象.
方法名相同引數列表不同.
好處是:體現程式的靈活
override是重寫:
在父子關係中,子類裡的現象.
好處是:不影響原來的功能,改的是子類的.
要求:繼承關係+有足夠的許可權+方法宣告和父類一樣
4.2 this和super的區別
—this代表本類物件,用來呼叫本類的成員變數/方法
—super代表父類物件,用來呼叫父類的成員變數/方法
—在構造方法裡出現時,都得是第一條語句.
—this和super不能同時出現.
該處使用的url網路請求的資料。
總結
繼承這個部分對於面向物件來說非常重要,要多練,多理解,後面才能學得輕鬆,加油!學習java的日子