1. 程式人生 > 其它 >重慶—java網際網路架構軟體工程師學習記錄—Day08(面向物件2)

重慶—java網際網路架構軟體工程師學習記錄—Day08(面向物件2)

技術標籤:java網際網路架構軟體工程師java程式語言

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的日子