多态
多态(Polymorphism)按字面的意思就是“多种状态”。在面向对象语言中,接口的多种不同的实现方式即为多态。引用Charlie Calverts对多态的描述——多态性是允许你将父对象设置成为一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作(摘自“Delphi4 编程技术内幕”)。简单的说,就是一句话:允许将子类类型的指针赋值给父类类型的指针。
1.面向对象的第三大特性
多态
生活中的多态
同一种事物,由于条件不同,则产生不同的结果
事物的多种表现形态
程序中多态
同一个引用类型,使用不同的实例,执行不同的操作
父类的引用 子类的实现
//使用多态进行实例化
Pet pet=new Dog();
Pet pet=new Penguin();
Pet pet=new Cat();
2.多态发生在继承关系中
3.多态实现的前提
1.类与类之间存在继承关系
2.类与接口之间存在实现关系(之后章节)
4.多态实现的步骤
1.编写父类
2.编写子类,一定要有子类重写父类的方法
3.使用时,就可以使用父类的引用类型,子类的实例!!
//使用多态进行实例化
Pet pet=new Dog();
Pet pet=new Penguin();
Pet pet=new Cat();
5.多态实现的方式
1.Pet pet=new Dog();
2.使用父类作为方法的形参实现多态,
调用具体方法传入实参作为子类的实例
3.使用父类作为方法的返回值实现多态,
定义方法的返回值为父类,调用方法的返回值为子类的实例
6.优点:程序的可扩展性
缺点:使用多态进行实例化,实例化的对象只能调用子类重写父类的方法,
子类特有的方法我们无法调用
如何解决弊端?
1.向上类型(自动类型转换)
Pet pet=new Dog();
好处:隐藏子类型,提供代码的可扩展型
弊端:只能调用子类重写父类的方法,子类特有的方法我们无法调用
2.向下类型(强制类型转换)
int b=(int)9.8;
Pet pet=new Dog();
pet.eat();
Dog dog=(Dog)pet;
dog.catchFlyDisc();
好处:能调用子类特有方法
弊端:向下类型有风险
容易发生异常
java.lang.ClassCastException(类型转换异常)
使用前进行判断,判断一个对象是否匹配另一个对象类型
对象 instanceof 类型(类名)
接口
Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)。
两种含义:一,Java接口,Java语言中存在的结构,有特定的语法和结构;二,一个类所具有的方法的特征集合,是一种逻辑上的抽象。前者叫做“Java接口”,后者叫做“接口”。
1.接口 --》代表一种能够做哪些操作。
电脑中的USB口
接口是特殊的抽象类。(此抽象类中只能放置抽象方法和静态常量)
解决Java的单继承特性。
2.
public abstract class A{
private int age;
private String name;
public void print(){
}
public abstract void add();
public abstract void del();
//省略setter/getter方法
}
public interface B{
static final String NAME="admin";
public void add();
}
3.接口特点
1.不能被实例化
2.实现类(StoDoor)必须实现接口(Lock)中所有的方法
3.实现类可以实现多个接口
4.接口中定义的变量都是静态常量
4.接口(interface) 实现(implements)
注意:不同包的类或者接口访问必须使用import指令引入其他类或者接口
5.使用接口完成多态的实例化
6.面向接口的编程不用考虑具体实现细节