內部類,類修飾符,上轉型物件,多型,介面回撥
內部類:
java支援在一個類中宣告另一個類,這樣的類稱之為內部類,而包含內部類的類稱為外部類。
內部類的使用方法:可以訪問外部類的成員變數和方法。但不可以在自己的類體中宣告類變數和類方法。
外部類使用內部類:外部類要想使用內部類裡的方法,是通過例項化內部類的物件,然後通過外部類的物件去呼叫內部類的物件的成員變數和方法。
如果我在main函式中,執行Tree tree=new Tree();
就會出現no enclosing instance of type TT is accessible. Must qualify the allocation with an enclosing instance of type TT問題。(原因)解決方法:把Tree宣告為static的就可以了。
不過使用的時候,最好還是通過外部類使用內部類的方法去用,如下:
TT tt=new TT();
tt.tree.ff();/
完整呼叫格式:
public class TT {
Tree tree;
int val;
void f1(){
}
class Tree{//內部類
int value;
void ff(){
val=2;//內部類中是可以訪問外部類的成員變數的。
f1();//內部類也可以呼叫外部類的方法。
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
TT tt=new TT();
tt.tree.ff();//通過外部類的物件,來訪問內部類物件裡面的變數和方法;
tt.tree.value=1;
}
}
類修飾符:
普通類前面可以有public,友好,abstract,final修飾符。類不能被protected和private修飾。
public:公共類。可以在任何另外一個類中(任何包),使用該類建立物件。
友好:友好類。只能在同一包中,用該類建立物件
abstract:抽象類。內部可以有抽象方法,繼承時,父類中的抽象方法必須在子類中重寫,故抽象方法不能被final修飾。抽象類除可含有抽象方法外,其餘和普通類相似,也可被public、友好修飾,相當於公共抽象類,友好抽象類。但不能被final修飾,因為該類還要被繼承重寫;也不能用new建立該類的物件;另外子類繼承抽象類時不能降低方法的訪問許可權。子類不能繼承父類中的構造方法。
final:final類不能被繼承,即不能有子類。java中的String就是final類,不能被改變。final修飾方法,表示這個方法不能被重寫,final修飾成員變數,就是常量,java中常量必須賦給其初值,不能在改變。final修飾方法的引數時,該引數值不能在該函式體中被改變,只於傳參的函式傳參值有關。
物件的上轉型物件:
上轉型物件必須存在繼承,把子類建立物件的引用賦給父類的物件。上轉型物件特點:
父類A,子類B:
A a=new B();
或
A a;
B b=new B();
a=b;
多型:
父類中的某個方法被子類重寫時,可以產生各自的功能行為。
介面回撥
介面:多繼承時使用。類實現介面時,必須重寫介面的全部方法。介面和類類似,有介面的宣告和介面體。介面中的方法都是抽象方法,且預設都是pubic abstract形式。所以在類實現介面時,類中實現介面的方法必須加public修飾(不降低訪問許可權原則)。介面中無變數,全是常量,預設用public stactic final修飾。
inteface A{
int a=100;//預設public static final修飾,常量必須賦初值。
int f();//預設public abstract修飾,必須在類中重寫。
}
- 介面可以被public和友好修飾,這點和普通類相同,都是同包的問題
- 如果父類實現了介面,那麼繼承該父類的子類不必在使用關鍵字implements宣告自己使用這個介面
- 介面可以被介面繼承,是繼承全部的方法和常量。
- 如果一個類實現了一個介面,卻沒有實現介面中的所有方法,該類必為抽象類。
介面回撥:把實現某介面的類建立的物件的引用賦給該介面宣告的介面變數,那麼該介面變數可以呼叫被類實現的介面中的方法。
iterface A{
void f();
}
class B implements A{
public void f(){
system.out.println("haha")
}
}
pulic class C{
pubic static void main(String[]args){
A a;
a=new B();
a.f();
}
}
//輸出haha
介面做引數:某方法引數是介面型別,那麼可以將實現該介面的類物件的引用傳遞給該介面引數,此時該介面引數可以回撥該類實現的介面中的方法。
“`
iterface A{
void f();
}
class B implements A{
public void f(){
system.out.println(“haha”)
}
}
class D{
pubic void g(A a1){
a1.f();
}
}
pulic class C{
pubic static void main(String[]args){
D d=new D();
d.g(new B());
}
}
//同樣輸出haha
相關文章
- Java_介面回撥與匿名內部類Java
- Java基礎之介面與抽象類及多型、內部類Java抽象多型
- 泛型,內部類泛型
- 匿名內部類泛型泛型
- 如何講清楚 Java 物件導向的問題與知識?(類與物件,封裝,繼承,多型,介面,內部類...)Java物件封裝繼承多型
- TypeScript 類訪問修飾符TypeScript
- 用匿名內部類實現 Java 同步回撥Java
- 3.6 Java內部類四種型別Java型別
- java中多型的理解——父類引用指向子類物件Java多型物件
- Java 的抽象類, 介面以及內部類Java抽象
- scala_繼承、型別判斷、抽象類、匿名內部類繼承型別抽象
- TypeScript 泛型介面和泛型類TypeScript泛型
- 開心檔之C++ 修飾符型別C++型別
- 多型和抽象類多型抽象
- java內部類,區域性內部類,靜態內部類,匿名內部類Java
- 物件導向之內部類物件
- solidity 引用型別修飾符memory、calldata與storage 常量修飾符Constant與Immutable區別Solid型別LDA
- 如何獲取java類中的欄位修飾符?Java
- TypeScript入門2:類、繼承、訪問修飾符TypeScript繼承
- 菜鳥成長系列-多型、介面和抽象類多型抽象
- java之內部類(InnerClass)----非靜態內部類、靜態內部類、區域性內部類、匿名內部類Java
- c# tcbs之外部類成員型別為內部類之示例C#型別
- 10-Java內部類——成員內部類、區域性內部類、匿名內部類Java
- 物件導向基礎(2)--抽象類 介面 集合 泛型物件抽象泛型
- java內部類之成員內部類之匿名內部類Java
- 繼承+多型+抽象類繼承多型抽象
- TS系列之介面/類/泛型泛型
- 介紹巢狀類和內部類(轉)巢狀
- java內部類之成員內部類之區域性內部類Java
- Java內部類詳解--匿名內部類Java
- java內部類之成員內部類Java
- Vue - 按鍵修飾符 && 系統修飾符Vue
- 物件型介面物件
- 內部類
- TypeScript(5)類、繼承、多型TypeScript繼承多型
- java多型抽象類例項Java多型抽象
- Java類的多型機制Java多型
- 物件導向--內部屬性型別物件型別