Java中的繼承、多態問題

由於也是第一次接觸這兩個概念,可能理解沒有那麼深,但至少是符合小白閱讀的。跟隨今天的作業來學習繼承和多態吧!

1、多態是什麼,多態的前提條件是什麼?

嗯。。。有點懵。多態是Java中面向對象思想中的核心思想之一,是指子類可以通過繼承、實現等方式去實現一個事物可以擁有多種形態。是有點抽象,後面通過實例慢慢了解吧。
前提條件:必須在有繼承或者實現的基礎上

2、多態中成員訪問的特點分別是什麼?

格式:Fu f = new Zi(定義類似於創建某一個類型的變量。但多態中等號左邊是父類,等號右邊是子類,子類是繼承父類的)
編譯運行中特點:
1.成員變量:編譯看等號左邊,運行也看等號左邊
2.成員方法(非靜態方法):編譯看等號左邊,運行看等號右邊
3.靜態方法:編譯看等號左邊,運行也看等號左邊
總結:先死記,後續理解了會補充(可在文章第六點實例中編寫體會)

3、什麼是接口,它的特點是什麼?

接口是Java中面向對象的一種機制,類似於抽象類,但不是抽象類。其定義的方法,只有方法特徵,沒有具體的方法主體。
特點:接口中定義的方法必須是抽象方法,若不寫public abstract默認也是抽象方法,後面在實現接口的時候必須進行方法的重寫才能調用。
格式:<修飾符> interface <接口名>(參數){
定義變量量;//叫是叫做變量,但值是確定的
定義抽象方法;
}

4、接口的成員特點有哪些?

成員包括成員變量和成員方法。
成員變量:前綴即使不加,系統默認也是static final
public static final 變量名 = 值;

成員方法:必須是抽象方法,即使不加抽象abstract 前綴,系統默認也是抽象。

5、抽象類和接口的區別是什麼?

1.抽象類中可以定義非抽象方法。而接口中必須都是抽象方法。

2.抽象類的繼承只能是單繼承、多層繼承。
接口中可以被類多實現(實現和繼承只是關鍵字不同,大致功能是一樣的。實現implements;繼承extends)
接口之間可以多繼承、多層繼承。

6:定義一個父類Animal eat方法 , 定義兩個子類 Dog 特有方法keepHome , Cat 特有方法 catchMouse ;並且 重寫eat方法

測試類中寫一個方法,參數列表有一個參數Animla類型,
要求: 調用該方法分別傳遞Dog對象 和Cat 對象, 使用instanceof進行將轉後調用eat,和他們的特有方法

package cn.Demo01;
/*
 * 定義一個父類Animal eat方法 , 定義兩個子類 Dog  特有方法keepHome ,   Cat 特有方法 catchMouse ;並且 重寫eat方法
   測試類中寫一個方法,參數列表有一個參數Animla類型,
   要求: 調用該方法分別傳遞Dog對象 和Cat 對象, 使用instanceof進行將轉後調用eat,和他們的特有方法
 */
public abstract class Animal {
	public abstract void eat();
}

package cn.Demo01;

public class Dog extends Animal{
	public void eat(){
		System.out.println("狗在喫飯");
	}
	
	public void keepHome(){
		System.out.println("狗看家");
	}
}

package cn.Demo01;

public class Cat extends Animal{
	public void eat(){
		System.out.println("貓喫飯");
	}
	
	
	public void catchMouse(){
		System.out.println("貓抓老鼠");
	}
}

package cn.Demo01;

public class Test {
	public static void main(String[] args){
		Animal d = new Dog();
		Animal c = new Cat();
		ceshi(d);
		ceshi(c);
	}
	public static void ceshi(Animal a){
		
		if(a instanceof Dog){
			Dog d = (Dog) a;
			d.eat();
			d.keepHome();
		}
	
		
		if(a instanceof Cat){
			Cat c = (Cat) a;
			c.eat();
			c.catchMouse();
		}
	
	}
}

在這裏插入圖片描述

7.測試: 如果一個方法的返回值類型是父類,那麼能否返回一個子類對象.(該父類不管是類,抽象類還是接口)

父類是類:可以

package cn.Demo02;
/*
 * 測試: 如果一個方法的返回值類型是父類,那麼能否返回一個子類對象.(該父類不管是類,抽象類還是接口)
   測試父類是類
 */
public class Fu {
	public void ceshi(){
		System.out.println("這是父類");
	}
}

package cn.Demo02;

public class Zi extends Fu{
	public void ceshi(){
		System.out.println("這是子類");
	}
}

package cn.Demo02;

public class Test {
	public static void main(String[] args) {
		
		Fu z = ceshi();  //此處若是子類接受,則不可以
		z.ceshi();
		
		
	}
	
	public static Fu ceshi(){
		Zi z = new Zi();
		return z;
	}
}

在這裏插入圖片描述
父類是抽象類:
父類是接口:
這兩個等有時間再驗證。

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