多态
- 多态作为面向对象的三大特性之一,体现出了重要的作用. 一种事物 可以用多种状态表示 .
但是是有前提的: 首先应该有继承关系. 要有重写, 父类对象引用子类对象
优点是提高了代码的可扩展性. 方便使用,使代码更简洁
//动物类
public class Animal {
public String name;
public int age;
public void sleep(){
System.out.println("睡觉");
}
public void eat(){
System.out.println("动物吃");
}
}
//狗类
public class Dog extends Animal{
public String name;
public int age;
@Override
public void sleep(){
System.out.println("睡觉");
}
@Override
public void eat(){
System.out.println("狗吃");
super.eat();
}
}
public class Test1 {
public static void main(String[] args) {
Animal dog = new Dog();
System.out.println(dog.name);
}
}
public class Test1 {
public static void main(String[] args) {
Animal dog = new Dog(); //多态的使用 用父类变量引用子类对象
}
}
上述代码 ,狗类继承动物类, new Dog()了一个动物类,但是用父类变量去接收,引用子类对象. 这种写法就是多态的使用.
多态满足 编译看左边,运行看右边.
当访问静态变量或者直接在类的内部给属性初始化的时候, 首先使用,访问的是左边的变量,static的方法不能去重写,因为他是属于类的.
-
多态中的向上转型 向下转型
Animal dog = new Dog(); //向上转型 向下转型之后,因为编译看左边,左边不能调用到子类 的方法,使得方法的访问出现问题 dog.sleep(); if(dog instanceof Dog){ Dog dog1 = (Dog)dog; dog1.play(); } //向下转型 使用instanceof检测当前对象是否是该类型,转型之后就可以访问子类独有的方法
向下转型 目的在于访问子类独有的方法.
-
多态存在的必要条件
- 要有继承 2.要有重写 3.父类的引用指向子类对象