Java基础day11
生活随笔
收集整理的這篇文章主要介紹了
Java基础day11
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Java基礎day11
- Java基礎day11-多態&抽象類&接口
- 1 多態
- 1.1多態的概述
- 1.2多態中的成員訪問特點
- 1.3多態的好處和弊端
- 1.4多態中的轉型
- 1.5多態的案例
- 2.抽象類
- 2.1抽象類的概述
- 2.2抽象類的特點
- 2.3抽象類的成員特點
- 2.4抽象類的案例
- 3.接口
- 3.1接口的概述
- 3.2接口的特點
- 3.3接口的成員特點
- 3.4接口的案例
- 3.5類和接口的關系
- 3.6抽象類和接口的區別
- 4.綜合案例
- 4.1案例需求
- 4.2代碼實現
Java基礎day11-多態&抽象類&接口
1 多態
1.1多態的概述
- 什么是多態
同一個對象,在不同時刻表現出來的不同形態 - 多態的前提
要有繼承或實現關系
要有方法的重寫
要有父類引用指向子類對象
1.2多態中的成員訪問特點
- 成員訪問特點
– 成員變量
編譯看父類,運行看父類
– 成員方法
編譯看父類,運行看子類 - 代碼演示
1.3多態的好處和弊端
- 好處
提高程序的擴展性。定義方法時候,使用父類型作為參數,在使用的時候,使用具體的子類型參與操作 - 弊端
不能使用子類的特有成員
1.4多態中的轉型
向上轉型
父類引用指向子類對象就是向上轉型
向下轉型
格式:子類型 對象名 = (子類型)父類引用;
代碼演示
1.5多態的案例
- 案例需求
請采用多態的思想實現貓和狗的案例,并在測試類中進行測試 - 代碼實現
2.抽象類
2.1抽象類的概述
當我們在做子類共性功能抽取時,有些方法在父類中并沒有具體的體現,這個時候就需要抽象類了! 在Java中,一個沒有方法體的方法應該定義為抽象方法,而類中如果有抽象方法,該類必須定義為抽象類!2.2抽象類的特點
- 抽象類和抽象方法必須使用 abstract 關鍵字修飾 //抽象類的定義 public abstract class 類名 {} //抽象方法的定義 public abstract void eat()? - 抽象類中不一定有抽象方法,有抽象方法的類一定是抽象類 - 抽象類不能實例化 抽象類如何實例化呢?參照多態的方式,通過子類對象實例化,這叫抽象類多態 - 抽象類的子類 要么重寫抽象類中的所有抽象方法 要么是抽象類2.3抽象類的成員特點
- 成員的特點
成員變量:既可以是變量、也可以是常量
構造方法:空參構造、有參構造
成員方法:抽象方法、普通方法
代碼演示
public abstract class Animal {private int age;private final String city = "北京";public Animal() {}public Animal(int age) {this.age = age;}public void show(){age = 30;System.out.println(age);System.out.println(city);}public abstract void eat(); }public class Cat extends Animal {@Overridepublic void eat() {System.out.println("貓吃魚");} }public class demo {public static void main(String[] args) {Animal a = new Cat();a.eat();a.show();} }2.4抽象類的案例
- 案例需求
請采用抽象類的思想實現貓和狗的案例,并在測試類中進行測試
代碼實現
public abstract class Animal {private String name;private int age;public Animal() {}public Animal(String name, int age) {this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public abstract void eat(); }public class Cat extends Animal{public Cat() {}public Cat(String name, int age) {super(name, age);}@Overridepublic void eat() {System.out.println("貓吃魚");} }public class demo {public static void main(String[] args) {Animal a = new Cat("加菲", 2);System.out.println(a.getName() + "," + a.getAge());a.eat();} }3.接口
3.1接口的概述
接口就是一種公共的規范標準,只要符合規范標準,大家都可以通用。 Java中的接口更多的體現在對行為的抽象!
3.2接口的特點
接口用關鍵字interface修飾public interface 接口名 {} 類實現接口用implements表示public class 類名 implements 接口名 {} 接口不能實例化 接口如何實例化呢?參照多態的方式,通過實現類對象實例化,這叫接口多態。 多態的形式:具體類多態,抽象類多態,接口多態。 接口的子類 要么重寫接口中的所有抽象方法 要么子類也是抽象類3.3接口的成員特點
成員特點
- 成員變量
只能是常量 默認修飾符:public static final - 構造方法
沒有,因為接口主要是擴展功能的,而沒有具體存在 - 成員方法
只能是抽象方法
默認修飾符:public abstract
關于接口中的方法,JDK8和JDK9中有一些新特性,后面再講解
代碼演示
//接口類 public interface inter {public static final int num1 = 10;public int num2 = 20;int num3 = 30;//public inter(){}//public void show() {}public abstract void method();void show(); } //實現類 public class interImpl extends Object implements inter {public interImpl() {}@Overridepublic void method() {System.out.println("method");}@Overridepublic void show() {System.out.println("show");} } //測試類 public class demo {public static void main(String[] args) {inter i = new interImpl();//i.num1 = 20;System.out.println(i.num1);System.out.println(inter.num1);} }3.4接口的案例
-
案例需求
對貓和狗進行訓練,他們就可以跳高了,這里加入跳高功能。
請采用抽象類和接口來實現貓狗案例,并在測試類中進行測試。 -
代碼實現
3.5類和接口的關系
- 類與類的關系
繼承關系,只能單繼承,但是可以多層繼承 - 類與接口的關系
實現關系,可以單實現,也可以多實現,還可以在繼承一個類的同時實現多個接口 - 接口與接口的關系
繼承關系,可以單繼承,也可以多繼承
3.6抽象類和接口的區別
-
成員區別
抽象類
變量,常量;有構造方法;有抽象方法,也有非抽象方法
接口
常量;抽象方法 -
關系區別
類與類
繼承,單繼承
類與接口
實現,可以單實現,也可以多實現
接口與接口
繼承,單繼承,多繼承 -
設計理念區別
抽象類
對類抽象,包括屬性、行為
接口
對行為抽象,主要是行為
4.綜合案例
4.1案例需求
我們現在有乒乓球運動員和籃球運動員,乒乓球教練和籃球教練。
為了出國交流,跟乒乓球相關的人員都需要學習英語。
請用所學知識分析,這個案例中有哪些具體類,哪些抽象類,哪些接口,并用代碼實現。
4.2代碼實現
//抽象人類 public abstract class Person {private String name;private int age;public Person() {}public Person(String name, int age) {this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public abstract void eat(); } //教練類 public abstract class Coach extends Person{public Coach() {}public Coach(String name, int age) {super(name, age);}public abstract void teach(); } //運動員類 public abstract class Player extends Person{public Player() {}public Player(String name, int age) {super(name, age);}public abstract void Study(); } //籃球教練類 public class BasketballCoach extends Coach{public BasketballCoach() {}public BasketballCoach(String name, int age) {super(name, age);}@Overridepublic void teach() {System.out.println("籃球教練教打籃球");}@Overridepublic void eat() {System.out.println("籃球教練吃羊肉");} } //籃球運動員類 public class BasketballPlayer extends Player{public BasketballPlayer() {}public BasketballPlayer(String name, int age) {super(name, age);}@Overridepublic void Study() {System.out.println("籃球運動員學習打籃球");}@Overridepublic void eat() {System.out.println("籃球運動員吃東西");} } //乒乓球教練類 public class PingPangCoach extends Coach implements LearnEnglish{public PingPangCoach() {}public PingPangCoach(String name, int age) {super(name, age);}@Overridepublic void teach() {System.out.println("乒乓球教練教乒乓");}@Overridepublic void eat() {System.out.println("乒乓球教練吃東西");}@Overridepublic void Speak() {System.out.println("乒乓球教練會說英語");} } //乒乓球運動員類 public class PingPangPlayer extends Player implements LearnEnglish{public PingPangPlayer() {}public PingPangPlayer(String name, int age) {super(name, age);}@Overridepublic void Study() {System.out.println("乒乓球運動員學習打乒乓球");}@Overridepublic void eat() {System.out.println("乒乓球運動員吃東西");}@Overridepublic void Speak() {System.out.println("乒乓球運動員說話");} } //說英語接口 public interface LearnEnglish {public abstract void Speak(); }//測試類 public class demo {public static void main(String[] args) {BasketballPlayer i = new BasketballPlayer("赤木晴子", 20);System.out.println(i.getName() + "," + i.getAge());i.Study();i.eat();System.out.println("---------");BasketballCoach a = new BasketballCoach("安西教練", 40);System.out.println(a.getName() + "," + a.getAge());a.eat();a.teach();System.out.println("---------");LearnEnglish b = new PingPangPlayer();b.Speak();} }總結
以上是生活随笔為你收集整理的Java基础day11的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: spring boot配置logback
- 下一篇: Java基础day12