Object類,內(nèi)部類,匿名內(nèi)部類,this關(guān)鍵字

一、object類

object:類層次結(jié)構(gòu)的根類,每個(gè)類都用object作為超類

object是不斷抽取而來的,具備著所以對(duì)象都具備的共性內(nèi)容

常用的共性功能

  • equals(Object obj):指示其他某個(gè)對(duì)象是否與此對(duì)象對(duì)象"相等" 。Boolean型
equals的用法

那么如果我想比較對(duì)象的內(nèi)容(年齡)怎么辦!

這么辦!

如何比較對(duì)象內(nèi)容
  • hashCode() :返回該對(duì)象的哈希碼值。
    實(shí)際上,由Object類定義的hashCode方法會(huì)針對(duì)不同的對(duì)象返回不同的整數(shù)。(這一般是通過將該對(duì)象的內(nèi)部地址轉(zhuǎn)換成一個(gè)整數(shù)來實(shí)現(xiàn)的,但是Java編程語言不需要這種實(shí)現(xiàn)技巧)
哈希碼值
  • getClass():返回此Object的運(yùn)行時(shí)類
    獲取的是當(dāng)前對(duì)象所屬的字節(jié)碼文件對(duì)象
getClass()
  • toString:返回該對(duì)象的字符串表示
toString

如何簡(jiǎn)潔明了的看懂:
加一個(gè)方法把toString覆蓋了!

toString覆蓋

二、內(nèi)部類

內(nèi)部類:將一個(gè)類定義在另一個(gè)類的里面,對(duì)里面那個(gè)類就稱為內(nèi)部類(內(nèi)置類,嵌套類)。

class Outer
{
    class Inner   //內(nèi)部類
 {
    
 }
}

內(nèi)部類訪問的特點(diǎn)

  • 內(nèi)部類可以直接訪問外部類中的成員
  • 外部類要訪問內(nèi)部類,必須建立內(nèi)部類的對(duì)象

內(nèi)部類的應(yīng)用

一般用于類的設(shè)計(jì):

分析事物時(shí),發(fā)現(xiàn)該事物描述中還有事物,而且這個(gè)事物還在訪問被描述事物的內(nèi)容
這時(shí)就是還有的事物定義成內(nèi)部類來描述。

內(nèi)部類修飾符

內(nèi)部類相當(dāng)于定義在了外部類的成員位置上

那么如何直接訪問外部類中的內(nèi)部成員呢。

外部類.內(nèi)部類名 = 外部類對(duì)象.內(nèi)部對(duì)象

舉個(gè)栗子:

內(nèi)部類的引用

當(dāng)內(nèi)部類的修飾符是static靜態(tài)的,要怎么訪問呢?

當(dāng)內(nèi)部類的修飾符是static靜態(tài)的,就相當(dāng)于一個(gè)外部類。

內(nèi)部類靜態(tài)時(shí)調(diào)用

當(dāng)內(nèi)部類是靜態(tài)的,成員是也是靜態(tài)的。

內(nèi)部類是靜態(tài)的,成員是也是靜態(tài)時(shí)

如果內(nèi)部類中定義了靜態(tài)的成員,這個(gè)內(nèi)部類也必須是靜態(tài)的

內(nèi)部類直接訪問外部類中成員

因?yàn)閮?nèi)部類持有了外部類的引用

外部類名.this
內(nèi)部類訪問外部類成員

內(nèi)部類放到局部位置

內(nèi)部類放到局部位置上

三、匿名內(nèi)部類

匿名內(nèi)部類就是內(nèi)部類的簡(jiǎn)寫格式
前提:內(nèi)部類必須繼承或者實(shí)現(xiàn)一個(gè)外部類或許和接口

匿名內(nèi)部類:其實(shí)就是一個(gè)匿名子類對(duì)象

格式:new 父類or接口(){子類內(nèi)容}
在前提條件下

寫成匿名內(nèi)部類:

abstract class Demo
{
    abstract void show();   
}
class Outer2
{
    int num = 3;
    void method()
    {
        //new Inner().show();  //繼承內(nèi)部對(duì)象
                              //Demo是抽象類不可以創(chuàng)建對(duì)象,因?yàn)橛谐橄蠓椒?         new Demo()  //把抽象方法覆寫了就可以(抽象方法先封裝起來)
         {
             void show()
             {
                 System.out.println("show........"+num);
             }
         }.show();
    }
}
public class InnerClassDemo2 
{
    public static void main(String[] args)
    {
        new Outer2().method();
    }
運(yùn)行結(jié)果

匿名內(nèi)部類的應(yīng)用

通常使用情況:
當(dāng)函數(shù)參數(shù)是接口類型時(shí),而且接口方法不超過三個(gè)。
可以用匿名內(nèi)部類作為實(shí)際參數(shù)進(jìn)行傳遞。

interface Inter
{
    void show1();
    void show2();
}
class Outer8 
{
/*  class Inner implements Inter
    {
        public void show1()
        {
        }
        public void show2()
        {
        }
    }*/
    public void method()
    {
        /*Inner in = new Inner();
        in.show1();
        in.show2();*/
        Inter in = new Inter()
        {
            public void show1()
            {
            }
            public void show2()
            {
            }
        };
        in.show1();
        in.show2();
    }
}
public class InnerClassDemo4 
{
    public static void main(String[] args)
{
    show(new Inter()
            {
        public void show1(){}
        public void show2(){}
            }
    );
}
    public static void show(Inter in)
    {
        in.show1();
        in.show2();
    }
}

(注釋起來的都是以前的方法)
匿名內(nèi)部類部分解釋

四、this關(guān)鍵字

舉個(gè)栗子說明哈!開心不?又舉栗子了!

this的第一個(gè)用處!


this 代表對(duì)象

this的第二個(gè)用處!


用this調(diào)用構(gòu)造函數(shù)

總結(jié)一下!

this的用處

  • 當(dāng)成員變量和局部變量重名,可以用this區(qū)分
    this:代表對(duì)象。

簡(jiǎn)單說:哪個(gè)對(duì)象調(diào)用了this所在的函數(shù),this就代表哪個(gè)對(duì)象

  • this也可以用于在構(gòu)造函數(shù)中調(diào)用其它構(gòu)造函數(shù)
    注意:只能定義在構(gòu)造函數(shù)的第一行。因?yàn)槌跏蓟瘎?dòng)作要先執(zhí)行。

this關(guān)鍵字的應(yīng)用

只要在本來中用到了本類的對(duì)象,通常都用this。

判斷兩個(gè)人是否是同齡人

class Person5
{
    private String name;
    private int age;
    Person5()
    {
        name = "baby";
        age = 1;
        System.out.println("person run");
    }
    Person5(String name)
    {
        this.name = name; 
    }
    Person5(String name,int age)
    {
        this(name);  //對(duì)this的調(diào)用必須是構(gòu)造函數(shù)中的第一個(gè)語句
        this.age = age;
    }//構(gòu)造函數(shù)和構(gòu)造函數(shù)之間的訪問;用this調(diào)用構(gòu)造函數(shù)
    public void speak()
    {
        System.out.println(this.name+":"+this.age);
    }

    public boolean compare(Person5 p)
    {
        if(this.age==p.age)
            return true;
        else
            return false;
    }
    }   
public class ThisDemo 
{
    public static void main(String[] args)
    {
        Person5 p1 = new Person5("aa",30);
        Person5 p2 = new Person5("zz",20);
        
        p1.compare(p2);
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 31,778評(píng)論 18 399
  • 一:java概述:1,JDK:Java Development Kit,java的開發(fā)和運(yùn)行環(huán)境,java的開發(fā)工...
    ZaneInTheSun閱讀 2,690評(píng)論 0 11
  • Advanced Language Features 知識(shí)點(diǎn):一. static修飾符 static修飾符可以用來...
    風(fēng)景涼閱讀 462評(píng)論 0 0
  • Java 內(nèi)部類 分四種:成員內(nèi)部類、局部?jī)?nèi)部類、靜態(tài)內(nèi)部類和匿名內(nèi)部類。 1、成員內(nèi)部類: 即作為外部類的一個(gè)成...
    ikaroskun閱讀 1,253評(píng)論 0 13
  • 微信小程序公開發(fā)布近一個(gè)月了,也正值春節(jié)后企業(yè)開工之時(shí)。 估計(jì)很多公司都在忙著總結(jié)上一年的情況,規(guī)劃本年度的計(jì)劃;...
    博為峰51Code教研組閱讀 291評(píng)論 0 0