類和物件(中)
Java的訪問控制修飾符及許可權
修飾符:public、protected、private、預設;
同一包內,可以訪問所有類的public,protected,預設的所有屬性和方法,不能訪問private屬性和方法。
不同包只能訪問其他包的public屬性和方法,其他都不可訪問
小結
訪問許可權首先看類前的修飾符:
當類的修飾符為public時,則類可以被所有的類所訪問(可以import)
當為預設時,則只能為包中的類所訪問。
在此前提下,再看屬性和方法前的修飾符:
類前修飾符為public時,當屬性和方法前的修飾符為public時,則該屬性可以被所有類訪問;
當屬性和方法前為protected修飾時,對於類定義而言,可以被同包中的類和所有子類訪問(子類和父類可以不在同一個包中),也就是B+C範圍,但對於物件而言,只能被同一個包的類物件所訪問,也就是B的範圍;
當為預設時,只能被同包中的類所訪問(比protected訪問許可權小);當為private時,只能被本類內部所訪問 。
子類對於從父類繼承的哪些屬性與方法的可見性
子類繼承了父類的所有屬性和方法, 但只有public、protected的屬性和方法在子類是可見的。
子類在繼承父類的時候,首先應該滿足父類可被訪問,例如當子類和父類不
在同一個包當中時,父類修飾符必為public;在父類能被訪問的前提下,凡
是修飾符為public或是protected的父類屬性成員或是方法能被子類所訪問;
private的屬性成員或是方法則不能被訪問。
組合
組合:一個類的物件引用是另一個類的屬性就是一個組合現象。
作用:java程式碼複用的一種方法。顧名思義,就是使用多個已有的物件組合為一個功能更加複雜強大的新物件。體現的是整體與部分、擁有的關係.
public class job {
String name;
int salary;
public int getsalary() {
return salary;
}
public void setsalary(int sa) {
this.salary=sa;
}
public String getname() {
return name;
}
public void setname(String na) {
this.name=na;
}
}
class person{
String name;
job j;
person(String na){
this.j=new job();
j.setname("baiche");
j.setsalary(100);
this.name=na;
}
public void cout() {
System.out.println("My name is "+name);
System.out.println("My job is "+j.getname());
System.out.println("My salary is "+j.getsalary());
}
}
public class run3 {
public static void main(String[] args) {
person p=new person("jiangshan");
p.cout();
}
}
過載
過載:在類中定義了多個同名而不同內容引數的成員方法時,稱這些方法是過載方法。
作用:同一型別的方法,對不同的物件,具有不同的表現形式
class Parent {
public int getScore(){
return 3;
}
}
class Son extends Parent {
public int getScore(){
return 4;
}
}
注:如果子類定義的方法與父類名稱相同(大小寫完全匹配),但引數名稱不同,不是覆蓋,而是過載。如果名稱、引數相同,返回值不同,則編譯不能通過。
覆蓋
如果在子類中定義一個方法,其名稱、返回型別及引數簽名正好與父類中某個方法的名稱、返回型別及引數簽名相匹配,那麼可以說,子類的方法覆蓋了父類的方法。
public class zilei {
int a,b;
int sum;
public void set(int a,int b) {
sum=a+b;
System.out.println(sum);
}
public int get() {
return sum;
}
}
class fugai extends zilei{
public void set(int a,int b) {
sum=a*b;
System.out.println(sum);
}
}
public class run4 {
public static void main(String[] args) {
zilei z=new zilei();
z.set(2, 3);
fugai f=new fugai();
f.set(2,3);
}
}
注意;子類的訪問修飾符許可權應等於或大於父類
同名的static方法和非static方法不能相互覆蓋
方法前有final修飾符,此方法不能在子類方法中進行覆蓋
在JDK中,很多父類的方法被子類重新覆蓋,賦予了不同的含義,如Object類中的boolean equals(Object obj)方法
抽象類中如果存在抽象方法,則具體子類必須對抽象方法進行覆蓋
相關文章
- cpp中的類和物件物件
- Delphi中的類和物件 (轉)物件
- Python中的類和物件(中級)Python物件
- 物件和類物件
- 類和物件物件
- python中類和物件的__dict__Python物件
- 物件導向中類和物件的定義是什麼?物件
- Scala 類和物件物件
- Java 物件和類Java物件
- Java 類和物件Java物件
- Java物件和類Java物件
- scala類和物件物件
- 類和物件案例物件
- 深入理解python中的類和物件Python物件
- Python中的類和物件是什麼Python物件
- java學習中對類和物件的理解Java物件
- 關於Java中的類和物件筆記Java物件筆記
- runtime(零) Objc 中類和物件的本質OBJ物件
- Python中的類和物件(二):描述符Python物件
- c++類和物件C++物件
- 類圖和物件圖物件
- 認識類和物件物件
- 【Kotlin】類和物件Kotlin物件
- 6.類和物件物件
- C++ 類和物件C++物件
- Java 中建立子類物件會建立父類物件麼?Java物件
- 複習JAVA面相物件(類和物件)Java物件
- C++類和物件是什麼?C++類和物件詳解C++物件
- 第10章 物件和類——物件和類(六) 抽象資料型別物件抽象資料型別
- java中的類與物件Java物件
- 鏈式-父類中返回子類物件物件
- 3.java類和物件Java物件
- Java 學習:物件和類Java物件
- 前端進階-類和物件前端物件
- Java基礎| 類和物件Java物件
- 4、類和物件—封裝物件封裝
- 初識Java類和物件Java物件
- [C++]類和物件(一)C++物件