1.多态的基础是继承
2.什么是多态?下边就是多态!
假设Animal是Dog类的父类
在测试函数中 就可以在main()中
Animal obj1=new Animal();//本类
Animal obj2=new Dog();//父类的引用是可以指向子类和本类的对象,
Dog obj3=new Animal();(这个是报错的,子类的引用不可以指向父类引用)
3.方法的多态也是基于继承的。如果方法只有子类有,是扩展的新功能,父类没有。则不能通过本类对象使用这个方法。
4.多态引用类型转换Dog dog=new Dog();
自动类型转换:Animal animal=dog; 把dog转换成animal 相当于int变成double
强制类型转换:Dog dog=(Dog)animal; animal换成了Dog类型
Cat cat=(Cat)animal;(这个不行,为什么?因为Cat不等于Dog,animal转换成Dog类型,和Cat类型不识别)
Instanceof可以解决防线问题;
If(animal instanceof Cat){
Cat cat=(Cat)animal;
}
Else{
System.out.println(“无法转换”);
}
5.JAVA中的抽象类 abstract class 类名{}
Abstract
限制规定子类必须实现什么方法,但不关注实现细节(定义抽象方法,只需要声明,不需要实现)
Public abstract void call(); //抽象方法没有方法体以分号结束。
抽象类的作用是什么?
因为他不关注方法的实现,所以可以为空,子类去帮这个空去写具体的方法。运用与前边介绍过的多态知识的相结合就可以更灵活的使用方法。
6.举个例子,把继承,多态,抽象类集中总结一下:
最开始没接触多态的时候
建四个类分别是父类Animal类,子类Dog类,子类Cat类和测试类,假设都有一个方法吃
Animal animal=new Animal(); animal.eat(); //具体类里边的代码不写了,想想一下 里边有一个eat方法,方法体是S.o.p(“吃”);
Dog dog=new Dog(); dog.eat(); //eat方法里为 (“狗吃”);
Cat cat=new Cat(); cat.eat(); //eat方法为 (”猫吃”);
以上是最初的形态:
在学习多态之后,父类的引用可以指向子类的对象
Animal animal1=new A…. animal1.eat(); 就是本类的eat
Animal animal2=new Dog(); animal2.eat(); 直接指向狗的eat
接下来就是abstract类。
可能目前我的理解比较浅显,有不对的待经验丰富后可以指正修改。
在Animal类中运用abstract 修饰符
Public abstract void eat(); //可以省略
然后建一个继承的Dog类或者Cat类。
在他们子类的继承的函数体里写东西,写具体的实现功能。这样子可以省略父类函数,减少代码的书写。
在测试类中直接
Animal animal1=new Cat(); animal1.eat(); 感觉跟多态的区别就是多了个关键字,然后主函数可以省略好多东西。只需要知道有吃的功能,具体吃什么由各自子函数去定义,狗吃骨头猫吃鱼等等吧。
7.接口:
1.抽象类强调一种共性功能,接口强调拓展功能。相当于插了个u盘
2 接口前一般加 ‘I’ 区别于其他类 例如 IPlayGame
第一步,定义一个接口
Public abstract interface IPlayGame{
Public abstract playGame();
}
第二步:
在原来多态,抽象的基础上 子类后边再加个implements 接口例如:IPlayGame
实现接口的时候,必须实现接口里的方法,在子类基础的方法下加入接口方法体。
第三步:在测试类中引用并使用
IPlayGame ip1=new SmartPhone();
Ip1.playGame();
IPlayGame ip2=new Psp();
Ip2.playGame();