一、多态
多态:在同一个方法中由于传入的参数类型不同而导致执行效果不同的现象就叫做多态。
java为了实现多态,允许使用一个父类类型的变量来引用一个子类类型的对象,根据被引用子类对象特征的不同,得到不同的运行结果。
二、对象的类型转换
因为多态涉及到将子类对象当做父类类型使用的情况,所以我们要学习类型的转换。转换有两种,一种是向上转换,一种是向下转换。
向上转型:
//父类 父类对象 =子类实例
向下转型
//子类 子类对象=(子类) 父类实例
将子类对象当做父类使用时不需要任何显示的声明,但此时不能通过父类变量去调用子类中的某些方法。
java提供了一个关键字instanceof用来判断一个对象是否为某个类或(接口)的实例或者子类实例,通常和if搭配使用
if(animal instanceof Cat){//判断animal是否是Cat类的实例对象
}else{
}
三、Object类
所有类的父类,所有类都直接或者间接继承自该类
通常重写该类 toString()方法获得自己想要的信息
四、匿名内部类
前面说一个接口需要定一个类来实现。除此之外,还可以使用匿名内部类来实现接口。
首先看内部类方式如何实现
interface Animal{
void shout();
}
public class Example01{
public static void main (String [] args){
class Cat implements{
public void shout(){
System.out.print("这是一只猫");
}
}
animalShout(new Cat());
}
public static void animalShout(Animal an){
an.shout();
}
}
下面看匿名内部类如何写。
interface Animal{
void shout();
}
public class Example02{
public static void main (String [] args){
animalShout(new Cat(){
public void shout(){
System.out.print("这是匿名内部类的猫叫");
}
});
}
public static void animalShout(Animal an){
an.shout();
}
}
匿名内部类是一种简便写法,在程序中不一定非要使用。