封裝 & 代碼塊 & 繼承 & super關鍵字 & 包 & 訪問權限 & 重寫與重載

封裝 & 代碼塊 & 繼承 & super關鍵字 & 包 & 訪問權限 & 重寫與重載


我要宣佈一件大事,我有粉絲了,哈哈哈哈哈哈哈哈啊哈哈哈啊哈,激動的❤,顫抖的手,我要繼續加油了
今天第一次用md繪製表格,淡定

封裝

什麼是封裝:在類中,對於不想被類外直接訪問的成員變量,進行私有化,同時對外提供一個公有的方法爲了訪問私有的成員。

封裝成員變量兩個步驟:

1 添加private

2 添加get和set方法

類設計原則
成員變量(屬性)私有化(用private修飾),添加get和set方法
公開方法(用public修飾)
exp:

private 屬性類型 Xxx;
get方法表示訪問私有屬性的方法:
public 屬性類型 getXxx(){
  	return 屬性;
}
set方法表示修改私有屬性的值的方法:
public void setXxx(參數類型 參數){
  	this.xxx = 參數;
}

代碼塊

代碼塊分爲:靜態代碼塊,動態代碼塊,局部代碼塊

局部代碼塊:聲明在方法中的代碼塊,執行時機與聲明位置相關。(瞭解) 提前釋放變量,控制變量的作用域
//main方法內
{

}

動態代碼塊:又稱構造代碼塊或實例代碼塊,聲明在類體中的代碼塊,創建對象時自動執行一次,每創建一個對象就執行一次動態代碼塊。初始化工作。(使用不多)
//類內
{

}

靜態代碼塊:使用static關鍵字修飾的動態代碼塊,在類加載時自動執行,並只執行一次。(記住)
//類內
static{

}

繼承

使用extends關鍵實現兩個類的繼承關係

被繼承的類:父類,根類,超類,基類

繼承的類:子類,派生類

語法
public class FatherClass{
	//屬性
	//方法
}
public class ChildClass extends FatherClass {
	//屬性
	//方法
}
public class Person {
	String name;
    int age;
	String birthday;
	
	public void showInfo() {
		System.out.println("姓名:"+name+" 年齡:"+age+" 出生日期:"+birthday);
	}
}

public class Student extends Person{
	
	String school;
	public void study() {
		System.out.println(name+"好好學習天天向上");
	}
}

super關鍵字

super表示父類的引用

1)super.屬性:表示訪問父類中的屬性,當子類中定義了與父類同名的屬性時,若想在子類中訪問父類的同名屬性,需要使用super.屬性訪問
2)super.方法:表示調用父類中的方法,在子類中需要調用父類中沒有被重寫的方法時,需要使用super.方法調用
3)super():表示調用父類的構造方法,注意:super()必須是子類構造方法中第一條語句
子類中構造方法默認第一條語句會調用父類的無參數構造方法super(),也可以手動調用父類中帶參數的構造方法

public class Animal {
	//屬性
	String nickname;
	String color;
	String strain;
	
	//默認構造方法
	public Animal() {
		System.out.println("父類Animal的構造方法執行了..........");
	}
	
	//帶參構造方法()
	public Animal(String nickname,String color,String strain) {
		this.nickname=nickname;
		this.color=color;
		this.strain=strain;
	}
	
	//打印方法
	public void printInfo() {
		System.out.println("本動物 暱稱:"+nickname+" 顏色:"+color+" 品種:"+strain);
	}
}

public class Dog extends Animal{
	
	int love;
	//默認構造方法
	public Dog() {
		super();//調用父類的默認構造方法
		System.out.println("Dog子類的構造方法執行了");
	}
	//帶參構造方法
	public Dog(String nickname,String color,String strain,int love) {
		super(nickname, color, strain);//調用父類的帶參構造
		this.love=love;
	}
	
	public void lookHome() {
		System.out.println(nickname+"正在給主人看家....");
		System.out.println("暱稱:"+super.nickname);
		System.out.println("顏色:"+super.color);
		System.out.println("品種:"+super.strain);
		System.out.println("親密度:"+this.love);
		super.printInfo();
	}
}

public class Test {
	public static void main(String[] args) {
		Dog afu=new Dog();
		afu.nickname="阿福";
		afu.color="黑色";
		afu.strain="哈士奇";
		afu.love=100;
		afu.lookHome();
		System.out.println("----------------------------------------");
		//調用Dog的帶參構造
		Dog xiaohei=new Dog("小黑", "白色", "泰迪", 100);
		xiaohei.lookHome();
	}
}

創建包
package com.qf.test;

public class Employee {
    private String name;        //姓名
    private int age;                //年齡
    private double salary;     //薪水

  	public Employee(){
        
    }
    public Employee(String name, int age, double salary){    //構造方法
        this.name = name;
        this.age = age;
        this.salary = salary;
    }
 } 
 導入包
 爲使用定義在不同包中的Java類,需要import語句來引入所需要的類。
語法格式:
import  package1[.package2…].類名

import com.qf.test.Employee;

public class PackageDemo {	
    public static void main(String args[]){
        Employee employee = new Employee();
    }
}

注意:

	要導入某個包中的所有類可以用:包名.*

	例如:import  java.util.*;

	在同一包中的類可以直接互相引用,無需import語句。 

訪問權限

本類 同包中類或同包子類 不同包子類 不同包類
public ok ok ok ok
protected ok ok ok error
默認[default] ok ok error error
private ok error error error

個人記憶法 protected保護子類,default只保護包
使用原則:

  • 修飾類時:只能public 或 默認的
  • 修飾成員變量和方法:可以使用public 、默認、protected 、private
  • 局部變量不能訪問權限修飾符。

重寫與重載

方法的重載:Overload,在同一個類中,方法名相同,參數類別不同,互爲重載方法。

方法的重寫:Override,在繼承過程中,在子類中重寫父類中繼承來的方法,方法名相同,參數列表、返回值必須相同,訪問權限不能比父類嚴格。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章