Java的三大特性
java是一个面向对象的语言,所以java也有面向对象语言的三大特性:继承,封装,多态,任何一个java项目,都会用到这三种特性,所以掌握好这三大特性非常的重要。
多态 (polymorphism)
多态指的是同一个方法调用,由于对象不同可能会有不同的行为,比如,现实生活中同一个方法,有不同的具体实现。
多态的特点
- 多态是方法的多态,属性没有多态。
- 多态的存在要有3个必须条件:继承,方法重写,父类引用指向子类对象。
- 父类引用指向子类对象后,该父类引用调用子类重写方法,比时多态就出现了。
public class Animal {
public void call() {
System.out.println("叫----");
}
public static void main(String[] args) {
Animal a1 = new Animal();
a1.call();
//父类引用指向子类对象
Animal a2 = new Cat();
a2.call(); //输出:喵喵喵喵喵!!!
//父类引用指向子类对象
Animal a3 = new Dog();
a3.call(); //输出:汪汪汪汪汪!!
}
}
class Cat extends Animal{
//重写父类的call方法
@Override
public void call() {
System.out.println("喵喵喵喵喵!!!");
}
}
class Dog extends Animal{
//重写父类的call方法
@Override
public void call() {
System.out.println("汪汪汪汪汪!!");
}
}
上面就是多态的使用,就是父类的引用指向子类对象。
向上转型
父类的引用指向子类对象,这个就是向上转型,是自动类型转换。
向上转型后的父类引用变量只能调用它编译类型的方法,不能调用它运行时类型的方法,如果要调用子类里面别的方法,只能强制向下转型。上面的代码就是向上转型
向下转型
在子类对象里面有自己的方法,但是引用是父类对象,所以如果想要使用子类的独有方法,必须要转为子类的类型,所以要强制转型,这就是向下转型。
下面就是向下转型:
在cat里面加上一个独有的方法,然后调用这个方法
public class Animal {
public void call() {
System.out.println("叫----");
}
public static void main(String[] args) {
Animal a1 = new Animal();
a1.call();
//父类引用指向子类对象
Animal a2 = new Cat();
a2.call(); //输出:喵喵喵喵喵!!!
//强制类型转换,从而可以调用cat里面的独有方法
Cat cat = (Cat)a2;
cat.eat();
//父类引用指向子类对象
Animal a3 = new Dog();
a3.call(); //输出:汪汪汪汪汪!!
}
}
class Cat extends Animal{
//重写父类的call方法
@Override
public void call() {
System.out.println("喵喵喵喵喵!!!");
}
//添加的一个新的方法
public void eat() {
System.out.println("吃猫儿粮!");
}
}
个人愚见,如有不对,恳请扶正!
向下转型的过程中,必须将保证子类继承父类,然后才可以强制转型,不然会报类型转换异常。