java的多态和抽象类都是在继承的基础上的,所以把握好继承这个基础很重要。
多态,简而言之就是同一个行为具有多个不同表现形式或形态的能力
多态的三个条件:1.继承 2. 重写 3.向上转型
继承和重写不多说,那什么是向上转型?向上转型有什么好处?
向上转型:将子类对象的引用赋值给父类。 那这又是什么意思?看代码
先声明一个父类
package javabasic;
public abstract class Animal {
public String name;
private int age;
public void intro() {
System.out.println("我是"+name +",今年"+ age + "岁了");
}
}
又声明了3个子类,因为类越多,越能展示向上转型的优势!
package javabasic;
import com.sun.webkit.ContextMenu.ShowContext;
class Dog extends Animal{
public void intro() {
System.out.println("这是小狗的重写方法");
}
}
class Mouse extends Animal{
public void intro() {
System.out.println("这是老鼠的重写方法");
}
}
class Monkey extends Animal{
public void intro() {
System.out.println("这是猴子的重写方法");
}
}
public class test {
public static void show(Animal a) {
a.intro();
}
public static void main(String[] args) {
//新建一个对象,向上转型成Animal类,然后统一的调用某个方法
Animal dog= new Dog(); //这里就体现了向上转型
show(dog);
show(new Mouse());
show(new Monkey());
}
}
- 向上转型的优势
1. 减少重复代码,使代码变得简洁。 2.提高系统扩展性。
注意点:当你调用函数的时候,向上转型系统会自动帮你实现,因为没必要特地声明Animal dog = new Dog();
正常声明就可以。而且声明出来的对象可以调用自己内部其他方法,就不用再向下转型了。
如果没有向上转型,那么要声明的函数个数是相当多的函数show(Dog d), show(Bird b), show(Cat c)……
抽象类是把父类进行抽象,pubic abstract class Animal{ },里面可以添加抽象方法,但抽象方法体必须为空(留着给子类自己去实现)。如果类中含有抽象方法,那么这个类必须是抽象类。抽象类不能被实例化,也就是说不能new出来。