>#### 14.多態
~~~
java中有兩種情況可以體現多態,一是繼承,二是實現接口。
所謂多態就是一種引用在不同情況下的多種狀態,也可以這樣理解:
多態是通過指向父類的指針,來調用不同子類中的實現方法。
eg:Pet pet = new Dog();
pet.eat();
Pet pet1 = new Cat();
pet1.eat();
多態在java中有什么用呢?案例:主人給寵物喂食:
package com.demo03;
/*實現功能:小貓吃東西
主人喂的!
食物是:鯽魚*/ //多態 抽象和super知識點
public class demo01 {
public static void main(String[] args) {
Master ms = new Master();
// Dog dog=new Dog();
// Bone bone=new Bone("骨頭");
// ms.feed(dog, bone);
/*
* Cat cat=new Cat(); Fish fish=new Fish("鯽魚"); ms.feed(pet,food);
*/
Pet pet = new Cat();
// Pet pet=new Pet();//抽象類不能被實例化
Food food = new Food("鯽魚");
ms.feed(pet, food);
}
}
class Master {
public void feed(Pet pet, Food food) {
pet.eat();
System.out.println("主人喂的!");
food.showName();
}
}
class Food {
String name;
public Food(String name) {
this.name = name;
}
public void showName() {
System.out.println("食物是:" + this.name);
}
}
class Bone extends Food {
public Bone(String name) {
super(name);
}
public void showName() {
System.out.println("食物是:" + this.name);
}
}
class Fish extends Food {
public Fish(String name) {
super(name);
}
public void showName() {
System.out.println("食物是:" + this.name);
}
}
abstract class Pet {
String name;
int age;
public abstract void eat();
/抽象類中不一定要有抽象方法,
抽象方法只能放在抽象類中,抽象方法不可以有方法體
}
class Dog extends Pet {
public void eat() {
System.out.println("小狗要吃東西");
}
}
class Cat extends Pet {
public void eat() {
System.out.println("小貓吃東西");
}
}
注意:通過多態的方式來訪問屬性和方法:只能訪問父類中已有的屬性和方法,
子類獨有的屬性的方法通過多態訪問不到。訪問方法時,如果方法被子類重寫,
則訪問到的是重寫后的方法。如果方法未被重寫,則訪問父類方法。
~~~
- java基礎
- 第一章 認識java
- 第一節 第一個程序
- 第二節 jvm jdk jre說明
- 第三節 注釋
- 第二章 開發環境配置
- 第三章 eclipse中的快捷鍵
- 第四章 基本數據類型和運算符
- 第一節 變量
- 第二節 標示符
- 第三節 基本數據類型
- 第四節 運算符
- 第五章 面向對象
- 第一節 創建類
- 第二節 創建對象實例
- 第三節 成員方法
- 第四節 如何定義一個函數
- 第五節 構造方法
- 第六章 this關鍵字
- 第七節 方法的重載
- 第八節 靜態變量和靜態方法
- 第九節 封裝
- 第十節 包的使用方法
- 第十一節 全局變量和局部變量的區別
- 第十二節 斷點調試
- 第十三節 繼承
- 第十四節 多態
- 第十五節 抽象類
- 第十六節 接口
- 第十七節 final關鍵字
- 第六章 數組
- 第七章 api和String
- 第八章 集合
- 第九章 IO流