目录
多态简介
多态是同一个行为具有多个不同表现形式或形态能力
多态就是同一个接口,使用不同的实例而执行不同的操作
同一个时间发生在不同的对象会产生不同的效果
多态的优点
消除类型之间的耦合关系
可替换性
可扩充性
接口性
灵活性
简化性
多态实现方式
继承
重写
父类型引用指向子类对象
多态示例
//测试类
public class Polymorphic {
public static void main(String[]args) {
Employee eat=new Employee("张三");
eat.Eat();
//向下转型(默认)
abcd breakfast=new Breakfast("张三");
//向上转型(前提是有一个向下转型的对象)
//注意:不是任何类都是进行转换的,只能转换为引用的对象,或者他的父类
Breakfast fast=(Breakfast)breakfast;
//可是使用运算符instanceof来进行判断是当前类,或者是子类
if(fast instanceof abcd) {
System.out.println(fast.getClass().getSimpleName()+"是Breakfast的对象或者子类");
}
breakfast.info();
//最后输出
//张三正在吃饭
//Breakfast是Breakfast的对象或者子类
//我是abc类的说明
}
}
//不符合继承的概念只是,用来测试instanceof是否能够判断子类
class abcd{
String name;
public abcd() {
}
public abcd(String name) {
this.name=name;
}
public void Eat() {
System.out.println(name+"正在吃饭");
}
public static void info() {
System.out.println("我是abc类的说明");
}
}
//员工类(父类)
class Employee extends abcd{
String name;
public Employee() {
}
public Employee(String name) {
this.name=name;
}
public void Eat() {
System.out.println(name+"正在吃饭");
}
public static void info() {
System.out.println("我是员工类的说明");
}
}
//老师类(子类继承员工类)
class Breakfast extends Employee{
public Breakfast() {
}
public Breakfast(String name) {
//使用super关键字来指定父类的构造方法
super(name);
}
//重写了父类的方法
public void Eat() {
System.out.println(name+"正在吃早饭");
}
public void exercise() {
System.out.println(name+"吃完早饭正在跑步");
}
public static void info() {
System.out.println("我是教师类的说明");
}
}
//主任类(子类继承父类员工类)
class lunck extends Employee{
public void Eat() {
System.out.println(name+"正在吃午饭");
}
public void exercise() {
System.out.println(name+"吃完午饭正在拉伸");
}
public static void info() {
System.out.println("我是主任类的说明");
}
}
//学生类(子类继承父类员工类)
class dinner extends Employee{
public void Eat() {
System.out.println(name+"正在吃晚饭");
}
public void exercise() {
System.out.println(name+"吃饭晚饭正在跳舞");
}
public static void info() {
System.out.println("我是学生类的说明");
}
}
多态总结
使用父类型的引用指向子类的对象
该引用只能调用父类的方法和属性
如果子类重写了父类的方法,那么在调用该放那个方法的时候,调用的是子类里面的方法
变量不能被重写
多态有两种形式
向上转型
父类型引用子类型的对象
向下转型
就是把父类型引用子类型的对象,转换为子类型引用子类型对象
示例:(子类型)父类型引用子类型对象
当向上转型的对象来调用静态方法,首先会执行最高父类当中的静态方法
运算符
语法:对象 instanceof 类
用来判断对象是否是类的实例,或者说是类的子类