1,多态的向上转型和向下转型
多态的向上转型:多态的第三个前提条件--->父类引用指向子类对象
格式:Fu fu = new Zi() ;
多态的弊端:不能访问子类的特有功能
可以使用向下转型:
将父类的强转强转转换为子类引用
Zi zi = (Zi)fu;
2.多态的前提条件以及成员访问特点
前提条件
1)必须存在继承关系
2)存在方法重写
3)父类引用指向子类对象
成员访问特点
1)成员变量:编译看左,运行看左
2)成员方法:编译看左,运行看右(存在重写) 非静态方法
3)静态方法:编译看左,运行看左 ,算不上方法重写,类名访问
4)构造方法:
分层初始化--先让父类进行构造初始化-----然后才是子类!
3.抽象类的成员特点
抽象类中:
成员变量:可以是变量,也可以是常量!
成员方法:即可是抽象方法,必须携带abstract关键字,也可以是非抽象方法
构造方法:存在无参/有参构造方法----对数据进行初始化
4.什么是抽象类,抽象类如何实例化
/*
一般情况:将一些共性内容抽取到独立的类中,并且有些功能仅仅给出声明,不具体实现,具体的实现通过子类进行实现,当前这个方法就是抽象方法--->必须为抽象类(Animal,Person,Buble:灯泡,Fruit...)
抽象类---->强制子类必须完成的事情(重写抽象类中的所有抽象方法!)
抽象类的最大特点:不能实例化,不能new ,只能通过子类进行实例化
抽象的父类指向子类对象--->抽象类多态 :Fu fu = new Zi() ; (Fu类是抽象类)
抽象类的子类如果为抽象类,那么一定会存在最具体的子类,否则不能实例化了!
*/
abstract class Amimal{
public abstract void eat() ;
}
abstract class Cat extends Animal{
public void eat() {
//xxx
}
}
//最具体的子类 extends Cat {
//}
//测试类中
class Test{
public static void main(String[] args){
//Animal a = new Cat() ; //Cat是抽象类
Animal a = new 最具体的子类() ;
}
}
5.多态的好处是什么?
提高代码的复用性---继承来保证
提高代码的扩展性---多态保证(后期使用最多):父类引用指向子类对象 Fu fu = new Zi() ;
6.什么时候使用继承关系?
如果A类是B类的一种,或者B类是A类的一种,这个使用extends完成两者继续关系,体现的是一种"is a"的关系!
不要为了部分功能而去使用继承!