Object類 &多態 & final關鍵字&instanceof &複習代碼塊 &面試題

Object類

類Object是類層次結構的根類。每個類都使用Object作爲超類。

equals()方法

指示其他某個對象是否與此對象“相等”。

public class Student extends Object{
	String stuNo;
	String stuName;
	int age;
	public void show() {
		System.out.println("學號:"+stuNo+" 姓名:"+stuName+" 年齡:"+age);
	}
}

public class Test {
	public static void main(String[] args) {
		Student zhangsan=new Student();
		zhangsan.stuNo="bj1805";
		zhangsan.stuName="xxx";
		zhangsan.age=20;
		
		Student lisi=new Student();
		lisi.stuNo="bj1805";
		lisi.stuName="xxx";
		lisi.age=20;
		
		boolean b=zhangsan.equals(lisi);
		boolean b2=zhangsan==lisi;
		System.out.println(b);
		System.out.println(b2);
	}
}

==操作符與equals方法的區別:

1 ==  比較 基本類型比較的是數據 ,引用類型比較對象的引用(地址)

2 默認情況 Object中equals和==一樣

3 String類型重寫了Object中的equals,所以String比較使用equals方法。

hashCode()方法

返回該對象的哈希碼值(理解爲對象的地址)。每一個對象的哈希碼值唯一

    Object obj1 = new Object();
	Object obj2 = new Object();
	Object obj3 = obj2;
	//obj2與obj3兩個對象的哈希碼值一樣
	System.out.println(obj1.hashCode());
	System.out.println(obj2.hashCode());
	System.out.println(obj3.hashCode());

getClass()方法

返回此Object的運行時類。通過某個對象通過反射獲取類。

Object obj = new Object();
Class cls = obj.getClass();//通過反射獲取到了Object類

toString()方法

返回該對象的字符串表示。可以在自定義類中重寫toString方法,以實現是對象轉成指定格式的字符串。

public class Person{
 	String name;
  	public Person(String name){
    	this.name = name;
  	}
  	//重寫toString方法
  	public String toString(){
    	return "name="+name;
  	}
}
public class DemoPerson{
  	public static void main(String[]args){
    	Person p = new Person("張三");
      	System.out.println(p);//輸出結果爲:name=張三
  	}
}

多態

程序中多態:同一個引用類型,使用不同的實例而執行不同操作 ,一句話理解:父類引用,子類對象。

多態實現步驟:

  • 1 編寫父類、子類,子類重寫父類方法
  • 2 運行時,使用父類變量,子類的對象

多態使用形式:

  • 1 使用父類作爲方法形參實現多態
  • 2 使用父類作爲方法返回值實現多態

向上轉型,向下轉型

向上轉型:將子類的對象賦值給父類變量,自動轉換

1 <父類型> <引用變量名> = new <子類型>();
2 此時通過父類引用變量調用的方法是子類覆蓋或父類的方法 ,編譯時看父類,運行時看子類
3 此時通過父類引用變量無法調用子類特有的屬性和方法

向下轉型:將父類的變量賦值給子類變量,強制轉換

Object obj = new String("abc");
String str = (String)obj;
Pet pet=new Dog();  // Pet pet=new Cat();
Dog d=(Dog)pet;

注意:
1 <子類型> <引用變量名> = (<子類型> )<父類型的引用變量>;
2 在向下轉型的過程中,如果沒有轉換爲真實子類類型,會出現類型轉換異常

final關鍵字

final:最終的
在Java中聲明類、屬性和方法時,可以使用關鍵字final來修飾。

final修飾變量(成員變量或局部變量),則成爲(符號)常量,只能賦值一次。

  • 修飾成員變量時,定義時同時給出初始值,或在構造方法中賦值
  • 修飾局部變量時,只能賦值一次

3.2 final修飾方法,則該方法不能被子類重寫,能被繼承

  final returnType methodName(paramList){
    …
  }

3.3 final修飾類,則類不能被繼承
final class finalClassName{

}

instanceof

對象向下轉型時,存在一個問題:
若一個父類A的引用a,指向一個子類B的實例,將a賦值給另一個子類C引用時,會拋出java.lang.ClassCastException異常;
拋出異常後程序將不能繼續向下執行,爲了避免這個異常的拋出,我們可以通過instanceof關鍵字判斷引用指向的實例是否可以進行強制轉換成某個子類對象

已知Pet類有兩個子類Dog和Cat:
public class Demo{
  	public static void main(String[]args){
      	Pet a = new Dog();
      	check(a);
  	}
  	//設計一個方法,判斷一個動物是貓還是狗
  	public static void check(Pet a){
      	if(a instanceof Dog){
        	System.out.println("狗");
      	}else if(a instanceof Cat){
        	System.out.println("貓");
      	}
  	}
}

複習代碼塊

一 局部代碼塊     位置:局部位置(方法內部)

     作用:限定變量的生命週期,儘早釋放,節約內存

     調用:調用其所在的方法時執行

二 構造代碼塊

     位置:類成員的位置,就是類中方法之外的位置

     作用:把多個構造方法共同的部分提取出來,共用構造代碼塊

     調用:每次調用構造方法時,都會優先於構造方法執行,也就是每次new一個對象時會自動調用.

三 靜態代碼塊

     位置:類成員位置,用static修飾的代碼塊

     作用:對類進行一些初始化  只加載一次,
     當new多個對象時,只有第一次會調用靜態代碼塊,
     因爲,靜態代碼塊   是屬於類的,所有對象共享一份

     調用: new 一個對象時自動調用

面試題?

1、靜態代碼塊、構造代碼塊、構造方法的執行順序?

靜態-》構造代碼塊-》構造方法

靜態代碼塊:只執行一次

構造方法:每次調用構造方法都執行
2題
class A{  
    public String show(D obj){  
           return ("A and D");  
    }   
    public String show(A obj){  
           return ("A and A");  
    }   
}     
class B extends A{  
    public String show(B obj){  
           return ("B and B");  
    }  
    public String show(A obj){  
           return ("B and A");  
    }   
}    
class C extends B{}   
class D extends B{}  

A a1 = new A();

A a2 = new B();

B b = new B();

C c = new C();

D d = new D();

System.out.println(a1.show(b)); A and A

System.out.println(a1.show©); A and A

System.out.println(a1.show(d)); A and D

//A a2 = new B(); 只能看到 return (“A and D”); return (“B and A”);

System.out.println(a2.show(b)); B and A

System.out.println(a2.show©); B and A

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章