什么是多态
多态是具有表现多种形态的能力的特征。
子类到父类的转换
我们先看一下基本数据类型之间的类型转换例如:
int i=5;
double dl = 5;
double d2 = 3.14;
int a=(int)d2;
事实上引用数据类型的子类和父类之间也存在着类型的转换问题例如:
Dog dog=new Dog("欧欧","雪纳瑞"); dog.eat(); Pet pet=new Dog("欧欧","雪纳瑞");//子类到父类的转换 pet.eat(); pet.catchingFlyDisc();//编译错误,父类的引用无法调用子类的特殊方法
子类转换成父类的规则
1:将一个父类的引用指向一个子类对象,称为向上转型,自动进行类型转换
2:此时通过父类引用变量调用的方法是子类覆盖或继承父类的方法,不是父类的方法.
3:此时通过父类引用变量无法调用子类特有的方法!
使用父类作为方法形参实现多态
public class Master
{
private String name="";
private int money=0;
public Master(String name,int money)
{
this.name=name;
this.money=money;
}
public void feed(Pet pet)
{
pet.eat();
}
public void feed(Dog dog)
{
dog.eat();
}
public void feed(Penguin pen)
{
pen.eat();
}
public class Test()
{
public static void main(String[] args)
{
Master master =new Master("王先生",100);
Pet pet=new Dog("欧欧","雪纳瑞");
master.feed(pet);
}
}
使用父类作为方法返回值实现多态
public class Master{ private String name=""; private int money=0; public Pet getPet(int id) { Pet pet=null; if(id==1) { pet=new Dog("欧欧","雪纳瑞") } else if(id==2) { pet=new Penguin("娜娜","帝企鹅"); } return pet; } }
接口
定义:接口是一种规范和标准,他们可以约束类的行为,是一些方法特征的集合
语法:
【修饰符】 interface 接口名 extends 父接口1,夫接口2.......
class 类名 extends 父类名 implements 接口1,接口2.......
接口的命名规则:接口的命名规则与类相同,如果修饰符是public,则该接口在整个项目可见,如果省略修饰符,则该接口只在包中可见!
接口中可以定义常量,不能定义变量。接口中的属性都会自动用 public static final修饰(即接口中全部都是静态常量)!
接口中的方法都是抽象方法,接口中方法都会自动用 public abstract修饰,接口中只有全局抽象方法!
和抽象类一样,接口不能被实例化,接口中不能有构造方法!
接口的实现类必须实现接口的所有方法,否则必须被定义为抽象类!
接口之间可以使用extends实现继承,一个接口可以继承自多个接口,接口不能继承自类!
//定义一个接口 public interface UsbInterface{ void service(); } //使用其接口 public class UDisk implements Usbinterface{ public void service() { .................. } }
01.抽象类中可以有普通方法,接口中不能
02.抽象类可以有构造,接口不能
03.抽象类中可以有普通字段,而接口中不行
04.抽象类不能实现多继承,接口可以
05.符合is a关系的选用抽象类,符合has a关系的选用接口
05.接口比抽象类抽象程度更好