封裝的目的是為了提高程序的安全性。封裝就是把不想讓第三者看的屬性,方法隱藏起來。
封裝的實現方法是: 1.修改屬性的可見性,限制訪問。
2.設置屬性的讀取方法。
3.在讀取屬性的方法中,添加堆屬性讀取的限制。
package com.chen.test; public class Test9 { private int age; // 定義年齡 private String name; // 定義姓名 private double price; // 定義價格 //用get/set方法對屬性進行封裝 public int getAge() { return age; } //在傳入年齡時,設置了年齡的限制 public void setAge(int age) { if (age > 100 || age < 0) { this.age = 18; } this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public double getPrice() { return price; } public void setPrice(double price) { this.price = price; }
}
private : 只能被類自身調用
public : 1. 可以被類自身中的方法調用。 2. 可以在子類中直接調用父類的public屬性和方法。3. 可以被對象直接調用。
protected: 1.可以被類自身的方法調用。 2.可以在子類直接調用父類的protected屬性和方法。
默認關鍵字: 1. 可以在子類直接調用父類的默認關鍵字修飾的屬性和方法。 2. 可以被本包的對象直接調用。
關鍵字的比較,從三個角度去對比:子類,包內,包外。
protected關鍵字的設計的初衷就是為了子類調用父類的屬性和方法設計的。
默認關鍵字設計的初衷是為了包內可以調用,包外不可以調用。
JAVA的繼承是 單線繼承,不允許多重繼承;
子類可以繼承父類的哪些方法和屬性:
1.父類的private屬性和方法,無法繼承
2.父類的protected屬性和方法,都可以繼承
3.父類的public屬性和方法,都可以繼承
4.父類的默認關鍵字修飾的屬性和方法,如果子類和父類在一個包裡,則可以繼承
抽象類與抽象方法:
不能夠被實例化的class,用abstract進行修飾,這就是抽象類。
抽象類中可以寫抽象方法、還可以寫非抽象方法----------------非抽象類中不能定義抽象方法;
抽象類中定義的抽象,必須要在子類中被重寫------子類必須重寫父類的抽象方法(除非子類也是抽象類)
抽象方法的作用?
子類必須重寫父類的抽象方法,可以實現多態;
final關鍵字的總結:
1. final修飾變量 ----- 給變量一次初始化的機會,以後就不能再修改
public final double dburl;
final修飾引用型變量 -------------------鎖定了引用的地址,不能再發生變化;
final Dog dog = new Dog("歡歡");
dog = null;
2. final修飾class ----- 這個class不能被子類繼承
public final class Dog extends Pet{}
3. final修飾方法 ------ 表示這個方法不能被子類重寫
public final void swim(Pool pool) {}
重寫:override
子類有一個與父類,同名、同參、同返回值的方法,那麼就說子類的這個方法重寫了父類的同名方法;
重寫了什麼?
方法的本質------>>> 是函數指針
重寫的本質就是:用子類內存區中方法的首地址,替換父類內存區中同名方法的首地址
接口與抽象類的對比
1. 接口是能力的表示
抽象類是Class,它有屬性和行為
2. 接口裡可以定義常量,但是沒有屬性
3. 接口中的方法,都是public abstract (共有的抽象方法,不能定義其它類型的方法)
4. 抽象類中的方法,可以是抽象的,也可以是非抽象的。但是接口中必須是抽象的;