>#### 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流
