一、多肽的概念
多肽是指同一个行为具有多个不同表现形式或形态的能力
(如:吃这个动作,对动物来说都可以发生这个动作,但是猫吃和狗吃是不同的,因为它们吃的东西不同)
多肽存在的三个必要条件:
1、需要存在继承或实现(接口)关系
接口(interface)是一个抽象的类型,只提供方法的定义。
实现类是接口的具体实现,要实现每一个接口的功能
2、同样的方法调用而不执行操作、运行不同代码(重写)
3、在运行时父类或接口的应用变量可以引用其子类的对象
语法:接口 + 接口变量 = new 实现类
多肽的作用:
1、多肽通过分离做什么和怎么做,从一个角度将接口和实现进行分离
2、多肽消除了类型之间的耦合关系
3、多肽的存在提高了程序的拓展性和后期的可维护性
abstract class Animal {
public String name;
public void eat() {
};
}
class Dog extends Animal {
public void eat() {
System.out.println("狗吃翔");
}
}
class Cat extends Animal {
public void eat() {
System.out.println("猫吃鱼");
}
}
public class Test {
public static void main(String[] arge) {
Animal anl = new Dog();
Animal an2 = new Cat();
anl.eat();
an2.eat();
}
}
二、对象的上下转型
2.1、由子类转型成父类,在继承图上是向上移动的,一般称为向上转型
2.2、向上转型是一个较专用类型向通用类型的转换,故比较安全,也就是说子类是父类的超级(如:以上代码中new一个dog就是,向上转型)
2.3、向上转型过程中,类接口中唯一可能发生的事情是丢失方法,而不是获取方法
2.4与之相反的操作是向下转型,不安全(需要instanceof操作符协助)
instanceof运算符用来运行时通过返回值来指出是否特定类或者是它是的子类的一个实例
用法:
result=object instanceof class
result:布尔类型
object:必须项,任意对象表达式
class:必选项,任意已定义的对象类
注意:如果object是class或其子类的实例,则instanceof运算符返回TRUE,反之返回FALSE。
使用场合:
在对对象做下转型之前,没有其他有关对象信息时务必使用instanceof来判断,以避免抛出茶classCastException异常
abstract class Animal {
public String name;
public void eat() {
};
}
class Dog extends Animal {
public void eat() {
System.out.println("狗吃翔");
}
public void sleep() {
System.out.println("我要睡觉");
}
}
class Cat extends Animal {
public void eat() {
System.out.println("猫吃鱼");
}
public void catchMouse() {
System.out.println("抓老鼠");
}
}
public class Test {
public static void main(String[] arge) {
Animal an1 = new Dog();
Animal an2 = new Cat();
Dog dog = new Dog();
dog.sleep();
an1.eat();
an2.eat();
if (an2 instanceof Cat) {
System.out.println("aa");
Cat cat = (Cat) an2;
}
}
}