這篇博客總結了1天,希望自己以後返回來看的時候理解更深刻,也希望可以起到幫助初學者的作用. 轉載請註明 出自 : "luogg的博客園" , 因為前不久偶然發現某網站直接複製粘貼我的博客,交談之後他們修改了出處. 封裝 一, 封裝的概念 1. 類可以看成一個封裝體,將對象的屬性和方法封裝到類中. 2 ...
這篇博客總結了1天,希望自己以後返回來看的時候理解更深刻,也希望可以起到幫助初學者的作用.
轉載請註明 出自 : luogg的博客園 ,
因為前不久偶然發現某網站直接複製粘貼我的博客,交談之後他們修改了出處.
封裝
一, 封裝的概念
- 類可以看成一個封裝體,將對象的屬性和方法封裝到類中.
- 把不希望外界看到或調用的屬性或方法用private 關鍵字修飾, 然後在屬性或方法的類中創建一個可以間接讓外部使用屬性或方法的通道.
二, 封裝的實現
- 通常將類中的成員變數私有化 (private) ,那麼再通過這個類創建對象後就不能訪問該類的變數 , 通過對外提供方法(setXxx,getXxx),可對該變數(xxx)進行訪問。
- boolean 類型的變數沒有 getXX,只有 isXX;
- IDE中可以右鍵source 快捷的設置變數的seter和geter方法
- get方法有返回值和return
- set方法無返回值,擔有形參
public int getAge() {
System.out.println(name + "的年齡是 : " + age);
return age;
}
public void setAge(int age) {
this.age = age;
}
三, this關鍵字的作用
1. 表示本類中的(age)屬性
this.age = age;
2. this([實參]); 表示在構造方法中調用構造方法. 應寫在構造方法中的第一行, 不然會報錯,構造方法中只能使用一次.
// 設置構造函數
public Person() {
System.out.println("這是有0個參數的構造方法");
}
public Person(String name) {
this.name = name;
System.out.println("這是有一個參數的構造方法");
}
public Person(String name , int age , char sex) {
this("張三");
System.out.println("這是有3個參數的構造方法");
}
=================
public class PersonTest {
public static void main(String[] args) {
Person p1 = new Person("",10,'男');
}
}
執行之後:
3. this表示當前對象
// this 的第三種用法:表示當前對象
====ThisPerson類=====
public void run() {
System.out.println("runing....");
System.out.println(this);
}
======主類======
ThisPerson p3 = new ThisPerson();
p3.run();
System.out.println(p3 + "\n");
執行結果:
四, 構造方法 :
創建類的對象並初始化,具體方法day04寫了.
五, 類的設計分析
根據要求寫出類所包含的欄位;
所有的欄位(屬性)都必須私有化;
封裝之後的欄位可通過 setter 和 getter 設值和取得;
按需求可添加若幹構造方法;
根據需求可添加相應的方法;
類中的所有方法都不要直接處理(輸出列印),而是交給調用者去處理。
六, static(靜態) 關鍵字的使用
- static修飾的屬性或方法稱為靜態屬性或者靜態方法.
- 一旦屬性或方法被static修飾,可以直接通過類名.方法()或者類名.屬性調用.
- 被static修飾的方法, 程式運行後不管用不用得到都會進入記憶體中的靜態區.
- 隨著類的載入而載入, 優先於對象存在 , 被所有對象所共用 , 可以直接被類名調用
- 靜態方法只能訪問靜態成員, 非靜態方法可以訪問靜態方法.
- 靜態方法中不可以使用this,super關鍵字
=====StaticPerson類中定義靜態屬性========
public class StaticPerson {
static String name;
int age;
char sex;
}
======主類====
public class TestStatic {
public static void main(String[] args) {
StaticPerson.name = "張三";
System.out.println(StaticPerson.name);
fun();
}
public static void fun() {
System.out.println("run..");
StaticPerson.name = "張三";
System.out.println(StaticPerson.name);
}
}
輸出結果:
====================================
繼承
一, 繼承概念及優點
子類擴展其父類的功能,達到類的重用,降低開發成本
優點:
1、提高了代碼的復用性。
2、讓類與類之間產生關係,有了這個繼承關係才有了多態的特性。
3、Java 語言中只支持單繼承(有別於 C 語言)。因為多繼承容易帶來安全隱患(父類多了, 功能相同的話,就會出現調用不確定性,覆寫一個方法,到底覆寫的誰的?),但是java支持多層繼承,即祖孫關係,祖先關係
二, 繼承的實現
父類:超類,基類
子類:派生類
格式:
訪問修飾符 class 子類名 extends 父類名(){}
三, 繼承的限制
- 在java中只允許單繼承
- 子類不能繼承父類的私有成員
- 父類的構造方法也不可以繼承
四, 子類對象實例化過程
1、先實例化父類構造方法為父類中的屬性初始化
2、再實例化子類構造方法
實質:在子類的構造方法中隱藏了一個 super()方法,調用父類中的構造方法
=======父類======
public class Person1 {
int age = fun();
public Person1() {
System.out.println("父類的構造方法被調用了");
}
public int fun() {
System.out.println("父類屬性方法被執行了");
return 0;
}
}
============子類===============
public class Person1Test extends Person1 {
int age = info();
public Person1Test() {
//super();隱藏了,它預設先調用父類的構造方法
System.out.println("子類的構造方法被執行");
}
public int info() {
System.out.println("子類的屬性被執行");
return 0;
}
}
=============主函數============
public static void main(String[] args) {
Person1Test p1 = new Person1Test();
}
=============輸出結果===========
五, super關鍵字的使用
1, 調用父類中的構造方法 super([參數]);
2, 調用父類中的普通方法 super.普通方法();
3, 調用父類中的屬性 super.屬性;
======父類Person類======
public Person() {
System.out.println("父類無參構造方法被調用");
}
public Person(String name) {
System.out.println("父類一個參數的構造方法被調用");
}
public String fun() {
System.out.println("父類中的屬性被初始化了");
return name;
=========子類Student類========
public void run(int id) {
super.fun();
System.out.println("子類的屬性被初始化");
}
public Student() {
super("張三");
System.out.println("子類構造方法被調用");
}
===========主函數===========
public static void main(String[] args) {
Student s1 = new Student();
s1.id = 10;
System.out.println(s1.id);
}
輸出結果:
六,包及訪問許可權
包的使用:import 包名.子包名.* 或 import 包名.子包名.類
訪問修飾符:
七, 方法的重寫
當父類的某個方法不適合於子類本身的特征行為時就當覆寫父類中應當改變的方法。
方法覆寫時應遵循的原則(一同兩小一大):
(一同):方法簽名必須相同;
(兩小):
子類方法的返回值類型比父類方法的返回值類型更小或相等
子類方法聲明拋出的異常應比父類方法申明拋出的異常更小或相等;
(一大):子類方法的訪問許可權應比父類方法更大或相等;
實現規則:
(1)在子類中定義了與父類中同名的方法;
(2)方法名稱、參數類型、返回值類型、全部相同
(3)並且子類中的的同名方法的訪問許可權不用比父類中的同名方法更嚴格 private訪問修飾符 許可權最低,最嚴謹
====父類====
public class Person {
public void run() {
System.out.println("父類正在跑步...");
}
}
====子類===
public class Student {
public void run() {
System.out.println("子類正在跑步!!!");
}
}
====主函數====
public static void main(String[] args) {
Student s = new Student();
s.run();
}
輸出結果 : 子類正在跑步!!!
八, final 關鍵字的使用
作用:
(1)聲明類:聲明類的時候表示該類不能再被繼承
(2)聲明方法:聲明方法的時候表示該方法不能在被子類被覆寫
(3)聲明變數:聲明變數的時候表示該變數變成常量(常量:一旦賦值之後,裡面的值不能再變)
九, 難點
重寫和重載的區別
super關鍵字和this關鍵字的區別
十,語句塊
普通塊
寫在方法裡面的 (方法, if語句 switch等等)
{}
構造塊
寫在類裡邊 {}
靜態塊
寫在類裡邊 static{}
執行的先後順序 :
靜態快先被執行
構造塊之後被執行
構造方法最後被執行
靜態塊只在創建對象時候執行一次,不管創建多少個對象,只執行一次