由於也是第一次接觸這兩個概念,可能理解沒有那麼深,但至少是符合小白閱讀的。跟隨今天的作業來學習繼承和多態吧!
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;
}
}
父類是抽象類:
父類是接口:
這兩個等有時間再驗證。