日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java基础day11

發布時間:2025/3/12 java 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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多態中的成員訪問特點

  • 成員訪問特點
    – 成員變量
    編譯看父類,運行看父類
    – 成員方法
    編譯看父類,運行看子類
  • 代碼演示
public class Animal {public int age = 20;public void eat(){System.out.println("動物吃東西");} }public class Cat extends Animal {public int age = 20;public int weight = 20;@Overridepublic void eat() {System.out.println("貓吃魚");}public void playgame(){System.out.println("貓玩");} }public class demo {public static void main(String[] args) {Animal a = new Cat();System.out.println(a.age);System.out.println(((Cat)a).weight);a.eat();//a.playgame();} }

1.3多態的好處和弊端

  • 好處
    提高程序的擴展性。定義方法時候,使用父類型作為參數,在使用的時候,使用具體的子類型參與操作
  • 弊端
    不能使用子類的特有成員

1.4多態中的轉型

向上轉型
父類引用指向子類對象就是向上轉型
向下轉型
格式:子類型 對象名 = (子類型)父類引用;
代碼演示

public class Animal {public void eat(){System.out.println("動物吃東西");} }public class Cat extends Animal{@Overridepublic void eat() {System.out.println("貓吃魚");}public void playgame(){System.out.println("貓愛玩");} }public class demo {public static void main(String[] args) {//多態//向上轉型Animal a = new Cat();a.eat();//a.playgame()://向下轉型Cat b = (Cat)a;b.eat();b.playgame();} }

1.5多態的案例

  • 案例需求
    請采用多態的思想實現貓和狗的案例,并在測試類中進行測試
  • 代碼實現
public 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 void eat(){System.out.println("動物吃東西");} }public class Cat extends Animal {public Cat() {}public Cat(String name, int age) {super(name, age);}@Overridepublic void eat() {System.out.println("貓吃魚");} }public class Dog extends Animal{public Dog() {}public Dog(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();a.setName("加菲貓");a.setAge(2);System.out.println(a.getName()+","+a.getAge());a.eat();a = new Cat("加菲",2);System.out.println(a.getName()+","+a.getAge());a.eat();} }

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接口的案例

  • 案例需求
    對貓和狗進行訓練,他們就可以跳高了,這里加入跳高功能。
    請采用抽象類和接口來實現貓狗案例,并在測試類中進行測試。

  • 代碼實現

//動物類 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 implements Jummping{public Cat() {}public Cat(String name, int age) {super(name, age);}@Overridepublic void eat() {System.out.println("貓吃魚");}@Overridepublic void jump() {System.out.println("貓跳高");} } //測試類 public class demo {public static void main(String[] args) {Jummping j = new Cat();j.jump();System.out.println("-------------");Animal a = new Cat();a.setName("加菲");a.setAge(1);System.out.println(a.getName() + "," + a.getAge());a.eat();//a.jump();a = new Cat("加菲",2);System.out.println(a.getName() + "," + a.getAge());a.eat();System.out.println("-------------");Cat c = new Cat();c.setName("加菲");c.setAge(1);System.out.println(c.getName() + "," + c.getAge());c.eat();c.jump();} } //接口 public interface Jummping {public abstract void jump(); }

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的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。