多态
多态:同一个行为具有的多个不同表现形式或形态的能力(多态性是对象多种表现形式的体现)
存在的必要条件:
1.继承
2.方法重写
3.父类引用指向子类对象
Parent p = new Child();
成员访问特点:
1.成员变量:编译看坐边,运行看右边;
2.构造方法:创建子类对象时,会访问父类的构造方法,对父类的数据进行初始化
3.成员方法 :编译看左边,运行看右边
4.静态方法:编译看左边,运行看右边
优点:
1.提高代码的维护性
2.提高了代码的扩展性
向上转型:父类引用指向子类对象例: Animal a = new Cat();
向下转型:把父类的引用强制转换为子类的引用例:Cat c = (Cat)a;
//多态
public class Test {
public static void main(String[] args) {
show(new Cat()); // 以 Cat 对象调用 show 方法
show(new Dog()); // 以 Dog 对象调用 show 方法
Animal a = new Cat(); // 向上转型
a.eat(); // 调用的是 Cat 的 eat
Cat c = (Cat)a; // 向下转型
c.work(); // 调用的是 Cat 的 work
}
}
class Animal {
public void eat(){
System.out.println("吃饭");
}
};
}
class Cat extends Animal {
public void eat() {
System.out.println("吃鱼");
}
public void work() {
System.out.println("抓老鼠");
}
}
class Dog extends Animal {
public void eat() {
System.out.println("吃骨头");
}
public void work() {
System.out.println("看家");
}
}
抽象类
抽象类:用abstract关键字修饰的类例:abstract class 类名 {}
抽象方法:用abstract关键字修饰的方法例:public abstract void eat();
抽象类的特点:
1.抽象类中不一定包含抽象方法,但是有抽象方法的类必定是抽象类(即成员方法,可以是抽象的,也可以是非抽象的)。
2.抽象类中的抽象方法只是声明,不包含方法体,就是不给出方法的具体实现也就是方法的具体功能。
3. 抽象类不能被实例化,只有抽象类的非抽象子类可以创建对象。
4. 构造方法,类方法(用 static 修饰的方法)不能声明为抽象方法。
5. 抽象类的子类必须给出抽象类中的抽象方法的具体实现,除非该子类也是抽象类。