三、面向对象的程序设计(Object Oriented Programming)之三-----多态
1、 多态(Polymorphism):父类型的引用可以指向子类的对象。
2、public class PolyTest
{
public static void main(String[] args)
{
Parent p = new Child();//多态
p.sing();
}
}
class Parent
{
public void sing()
{
System.out.println("parent is sing");
}
}
class Child extends Parent
{
public void sing()
{
System.out.println("child is sing");
}
}
Parent p = new Child();为多态方式调用方法,首先检查父类中是否有sing()方法,若没有编译出错,若要。再去调用子类的sing()方法。
3、两种强制类型转换:
a>向上类型转换(upcast):将子类型转换成为父类型;
b>向下类型转换(downcast):将父类型转换为子类型,对于向下的转换,必须要显示指定(必须要使用强制类型转换)
例:
public class PolyTest
{
public static void main(String[] args)
{
//向上类型转换
Cat cat = new Cat();
Animal animal = cat;
animal.sing();
//向下类型转换
Animal a = new Cat();
Cat c = (Cat)a;
c.sing();
}
}
class Animal
{
public void sing()
{
System.out.println("animal is singsing");
}
}
class Dog extends Animal
{
public void sing()
{
System.out.println("dog is singsing");
}
}
class Cat extends Animal
{
public void sing()
{
System.out.println("cat is singsing");
}
} 输出结果为:cat is singsing
cat is singsing
4、抽象类(abstract class):使用了abstract关键字所修饰的类叫做抽象类。抽象类无法实例化,即不能new出一个抽象类对象。
5、抽象方法(abstract method):使用abstract关键字所修饰的方法叫做抽象方法。需要定义在抽象类中。,有声明无实现。之前所定义的方法叫做具体方法,既有声明也有实现。
6、如果一个类中包含了抽象方法,那么这个类一定是抽象类,声明成abstract class,在抽象类中有抽象方法也可以有具体方法。无论何种情况,只要一个类是抽象类,那么这个类无法实例化。在子类继承父类的情况下(父类是抽象类),那么该子类必须要实现父类中所定义的所有抽象方法,否则子类要定义成抽象类。